场景:
我正在与一个20+的团队合作开发一个远程git存储库.分支机构经常制作,承诺和合并.
一位同事和我在一个分支机构工作了几天.他重组了分支机构,解决了所有冲突并推动了.
当我尝试拉动时,我得到"自动合并失败"并提示解决所有冲突.
当我"git status"时,我发现我有不同的origin/branch并且每个都有超过100个不同的提交.
问题:
到目前为止,他完成了我的所有提交,刚刚进行了重新设计,如果我继续合并,我可能会重做他已经完成的冲突解决方案.
问题
这里发生了什么?
该怎么办?为什么?
旁白
我已经阅读了很多关于git的内容,我还在学习,并且希望得到一个与git逻辑有关的直接答案,而不是与相关的命令有关.
先感谢您.
不,不能这样做(回答问题标题中的问题).
在通过推送,拉动或克隆与其他人共享变更集之前,应该重新进行重新定位.
问题的例子,一个程序员提交5个变更集:
(1)---(2)---(3)---(4)---(5)
Run Code Online (Sandbox Code Playgroud)
这些更改集与另一个开发人员共享,该开发人员最初只有一个包含第一个变更集的克隆,因此他在自己的存储库中拥有自己的变更集.一旦他拉了或你推了,这就是他所拥有的:
(1)---(2)---(3)---(4)---(5)
\
\
(A)---(B)---(C)
Run Code Online (Sandbox Code Playgroud)
由于他想要一个线性历史,他在你的变革集之上重新定义,得到这个:
(1)---(A)---(B)---(C)---(2')---(3')---(4')---(5')
Run Code Online (Sandbox Code Playgroud)
请注意,我现在在他的存储库中标记了您的更改集,以表明它们是"您的"更改集,但现在受到其早期更改的影响,因此不再与您的相同(哈希或其他).
然后你拉,这是你得到的:
(1)---(A)---(B)---(C)---(2')---(3')---(4')---(5')
\
\
(2)---(3)---(4)---(5)
Run Code Online (Sandbox Code Playgroud)
现在你有两个这些变更集的"副本".
如果您在存储库中的第5个变更集之后没有做任何事情,您可能只是将它们从存储库中删除,但是标记该单词"可能",它带有强烈要求,您知道存储库的状态,并且您需要了解存储库的每个克隆.
在一切都恢复到糟糕状态之前,它不需要多次拉动 - 合并 - 推动.
结论:除非您知道自己在做什么,否则不要重新设置变更集,并且几乎肯定不会重新设置共享的变更集.
实际上:这个警告应该反对所有形式的历史重写.重写历史记录的任何内容都必须单独完成,并且所有克隆必须无效,否则您将拥有不同的历史记录和受影响的变更集的多个"副本".你不想在这里!