恢复在合并期间被删除的单个文件的git操作

44

我目前在分支 'foo' 中。我刚刚运行了 git merge master 命令。唯一的问题是,foo 中有一个特定的文件我想要保留。有没有一种方法可以将该文件找回,同时保留来自合并主干的所有其他更改?


git merge 只有在工作目录中没有更改的情况下,并且需要从其他分支引入更改时才会覆盖文件。为了明确起见,您想要旧版本(来自您的分支)而合并成功了,还是合并产生冲突,您希望解决后的版本看起来像您的分支的以前版本? - CB Bailey
是的,合并成功了。我想要旧版本的文件。 - tybro0103
2个回答

49

尝试这样做:

git checkout HEAD -- filename

这将使你的文件回滚到上一个提交。如果你想要回滚到更早的某个提交,你可以使用提交哈希或在 HEAD 关键字末尾添加 ^N,例如HEAD^2


4
如果合并尚未完成(由于冲突原因),只需使用git checkout filename命令。 - oz10
4
如果是由于文件冲突,你需要使用 git checkout --ours filename 命令。该命令会使文件保留当前分支上的版本。 - CB Bailey
我最后在别处找到了这个,但是使用了提交哈希而不是HEAD^1 ... 谢谢! - tybro0103
@"Charles Bailey" 是的,我漏掉了。 - oz10
3
我不知道这个说法之前是否正确,但是一次回滚就在HEAD^(或者使用分支名字代替HEAD),而更早之前的提交可以用 HEAD~2(例如 HEAD~n)来表示。 - ocodo
如果他没有提交他的最后更改,HEAD 将使他回滚到上次提交;如果他没有更改任何内容,他已经在 HEAD 上了。HEAD^n 是为了进一步回滚。 - Rayjax

0

我不确定如何从当前情况中纠正问题,但您可能想查看 git merge -s ours。文档在这里

一个工作流程应该是:

  1. master创建分支a
  2. 在分支a中进行自定义更改,您将不希望将其合并回master
  3. 检出mastergit merge -s ours a
  4. 检出a并继续工作和提交。

现在当您与主分支合并时,步骤2中的自定义更改将被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接