Git:从分支中删除单个文件,同时将其保留在项目中

标签 git

在某些时候,我必须编辑一个与我正在处理的分支(问题)无关的文件。我不小心把它推送到了 Github,在我创建 Pull Request 时看到了它。

我想从我的分支中删除文件,而不是从项目中删除 - 即:我无法删除文件并将其作为提交推送。

我试过了:
git reset HEAD^ path/file.ext
但没有运气(什么也没发生 - 没有错误并且文件没有恢复)。

有谁知道解决这个问题的正确方法吗?

最佳答案

从听起来像是,您基本上希望删除 merge 请求中文件的所有更改。首先要做的是 check out 文件的干净副本并将其添加到您的分支。

git checkout master -- <the file>

现在提交这些更改并将新提交推送到您的 Remote 。 pull 请求应更新为不再对此文件进行更改。

如果你是唯一一个使用过这个分支的人,你可以重新设置你的提交,这样最新的提交就不再出现在你的历史中(但这真的没什么大不了的)。为此你会git rebase -i master ,选择“压缩”提交。为了更新 pull 请求中的提交,您需要执行 git push -f <your branch> .以便新提交覆盖旧提交。这一步是完全可选的。

关于Git:从分支中删除单个文件,同时将其保留在项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263536/

相关文章:

git - 无法在子模块路径中找到当前的原始版本/主版本

git - 更改涉及重命名的 git merge 相似性索引的阈值(如 -M[n] --find-renames[=n] on diff)

Git 在本地文件系统中推送;可行的工作流程解决方案?

git - 在 merge 期间忽略还原的更改

git - 如何在本地申请 Pull Request?

sshd 的 Git diff 解释

git - 如何在 jgitflow-mavenplugin 中没有 develop 分支工作

git - Heroku 的意思是 "Don' t 忘记为应用程序的所有其他本地 checkout 更新 git Remote 。”?

git-p4 克隆单个文件

git - 如何在 cygwin(和一些 linux 发行版)上将企业证书颁发机构 (CA) 添加到 git