题 git恢复在合并期间删除的单个文件


我现在在分支'foo'。我跑了 git merge master。唯一的问题是我想保留foo中的某个文件。有没有办法让它恢复,但保持合并主人的所有其他变化?


43
2018-01-19 19:42


起源


git merge 不会破坏文件,除非它在工作树中保持不变,并且有一个更改从另一个分支引入。为清楚起见,合并是否成功完成并且您希望分支中的旧版本,或者合并是否会产生冲突,并且您希望解析后的版本看起来像您的分支的先前版本? - CB Bailey
是的,合并成功了。我想要旧版本的文件。 - tybro0103


答案:


尝试这样的事情:

git checkout HEAD -- filename

这将使您的文件回滚一次提交。如果要进一步返回特定提交,可以使用提交哈希或将^ N附加到HEAD关键字的末尾,例如: HEAD^2


46
2018-01-19 19:52



或者如果合并尚未完成(由于冲突),只需git checkout filename。 - paxos1977
@ceretullis:如果是由于相关文件中的冲突,你需要 git checkout --ours filename。 - CB Bailey
我实际上最终在其他地方找到了这个但是使用了提交哈希而不是HEAD ^ 1 ...谢谢! - tybro0103
@“查尔斯贝利”呀,离开了那个。 - paxos1977
我不知道这是否曾经是正确的,但单一的回滚是 HEAD^ (或branchname而不是HEAD)并进一步向后提交 HEAD~2 (即HEAD~n) - ocodo


我不确定如何从当前情况纠正问题,但你可能想看一下 git merge -s ours。文档是 这里

工作流程将是

  1. 创建分支 a 从 master
  2. 在分支中进行自定义更改 a 你不想合并回来 master
  3. 查看 master 和 git merge -s ours a
  4. 查看 a 并继续工作和承诺。

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


0
2018-01-19 19:48



遗憾的是,这里的文档已经不复存在了。 ;) - poige