在撤消git merges时遇到一些问题。发生了什么:
D1抱怨他在测试版上所做的更改已被覆盖
X---D---E---F---M1--M2--M3 beta
/ / / /
/ X---X---X---X---X topic
/ /
A---B---C---X---X master
我读了一些stackoverflow问题并在#git中询问并最终运行git revert -m 1 M3,git revert -m 1 M2和git revert -m 1 M1。 D1很高兴他的改变又回来了。
我现在认为我可以将主题合并到测试版但是这次选择git checkout --ours但我不能因为没有发生任何事情。我读过https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt,但仍然不理解所有内容。
我最终将我的所有主题提交重新绑定到一个提交,然后我可以合并到beta。
我想知道的是,如果有更简单的方法来解决这个问题吗?
答案 0 :(得分:1)
您无法再次在主题中合并的原因是因为更改已经存在于历史记录中,并且git没有任何内容可以引入分支。当您执行git revert
撤消合并时,您创建了新的提交。这些提交与已经完成的合并提交相反。分支测试版具有从主题撤消的更改,但提交仍然在历史记录中,因此当您尝试再次合并时,没有任何内容可以合并。您通过创建一个新文件来“取消”提交,该文件将文件更改回原来的状态。
这就是你的分支现在的样子
X---D---E---F---M1--M2--M3--R1--R2--R3 beta
/ / / /
/ X---X---X---X---X topic
/ /
A---B---C---X---X master
R1,R2和R3是您拥有的合并的还原提交。
解决问题的更简单方法就是让D2正确解决合并冲突。来自D1的更改在他们检查文件并提交时被踩到了。
如果确实再次发生,解决问题的最佳方法是创建一个能够正确解决冲突的新提交。只要解决合并冲突的人没有使用-m
选项提交,git就会附加在合并提交中有冲突的文件。然后您可以使用git log -p -m {MERGE SHA} {FILE}
,您可以看到文件中的更改并更正它们。
要从主题引入更改,您必须手动执行此操作。您可以通过git diff --name-only beta topic
获取不同的文件列表。然后执行git checkout topic -- <files>
然后提交文件,将文件自行测试。