我正在使用一个存储库,其中几周前执行了 merge ,我们刚刚发现它使用了 --strategy=ours
标志(它应该使用 --strategy-option=ours标志),因此不对 HEAD 应用任何更改。但是,我们需要应用更改。 Git 已经将分支识别为正在 merge ,并且在分支的历史记录中进行了提交。
这种 merge 无法使用 git revert -m ...
恢复和/或重新应用 merge 以更改文件的正确方法是什么?
master A - B - E - F - G ---> L - M - N
\ /
topic C - D
merge 提交 (F)
将是这种情况下的罪魁祸首。
最佳答案
我已经找到了解决这个问题的方法。这一切都在 Linus 写的关于恢复错误 merge 的信中:How to revert a faulty merge .
git merge --strategy=ours topic
在我们的例子中不是有意的。即使它是一个错误的 merge ,它也不能被恢复,并且已经被推送了很长时间,具有恢复 merge 提交而不能恢复恢复提交的相同效果。
解决方案是 check out 主题分支,从第一次提交开始运行 rebase --no-ff
,然后将该分支 merge 回 master。
git checkout topic
git rebase -i --no-ff <C>
git checkout master
git merge topic
这产生了屈服的效果:
fixed–topic C'–––D'––––––––––––––––––––-
/ \
master A–––B–––E–––F–––G –––> L–––M–––N–––F2
\ /
topic C–––D
要真正深入理解这一点,请阅读这封信的最后部分 How to Revert a Faulty Merge使用 --no-ff
rebase 选项重新创建分支。
关于git - 如何恢复使用 strategy=ours 的 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225829/