git - 如何恢复使用 strategy=ours 的 merge ?

标签 git git-merge git-revert

我正在使用一个存储库,其中几周前执行了 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/

相关文章:

android - 缺少获取 android.compileSdkVersion !错误梯度构建

python - 从 git URI 进行更快的 pip 安装

git - 在 merge.renameLimit 警告加上冲突后撤消 git merge

git - 如何压缩一个分支中的提交,同时将它们保留在另一个分支中?

git - merge 2 个不同的 git 仓库

git - 在 master 中间恢复多个提交

javascript - 无法使用来自 git 的 npm 包安装

git - 为什么在github push 时git 不要求我输入用户名和密码?

git - 仅还原推送提交的单个文件