Git rebasing - 另一个人可以为我修改远程分支吗?

iph*_*pps 2 git

场景:

我正在与一个20+的团队合作开发一个远程git存储库.分支机构经常制作,承诺和合并.

一位同事和我在一个分支机构工作了几天.他重组了分支机构,解决了所有冲突并推动了.

当我尝试拉动时,我得到"自动合并失败"并提示解决所有冲突.

当我"git status"时,我发现我有不同的origin/branch并且每个都有超过100个不同的提交.

问题:

到目前为止,他完成了我的所有提交,刚刚进行了重新设计,如果我继续合并,我可能会重做他已经完成的冲突解决方案.

问题

这里发生了什么?

该怎么办?为什么?

旁白

我已经阅读了很多关于git的内容,我还在学习,并且希望得到一个与git逻辑有关的直接答案,而不是与相关的命令有关.

先感谢您.

ang*_*son 8

不,不能这样做(回答问题标题中的问题).

通过推送,拉动或克隆与其他人共享变更集之前,应该重新进行重新定位.

问题的例子,一个程序员提交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个变更集之后没有做任何事情,您可能只是将它们从存储库中删除,但是标记该单词"可能",它带有强烈要求,您知道存储库的状态,并且您需要了解存储库的每个克隆.

在一切都恢复到糟糕状态之前,它不需要多次拉动 - 合并 - 推动.

结论:除非您知道自己在做什么,否则不要重新设置变更集,并且几乎肯定不会重新设置共享的变更集.

实际上:这个警告应该反对所有形式的历史重写.重写历史记录的任何内容都必须单独完成,并且所有克隆必须无效,否则您将拥有不同的历史记录和受影响的变更集的多个"副本".你不想在这里!