Git pull --rebase生成冲突循环

Sou*_*ker 2 git

我确定我做错了什么,但这就是发生了什么.

我的团队有一个开发分支,我们从分支机构创建功能分支.

我正在研究一个功能,每当我尝试从开发中拉出--rebase时,我遇到了一堆冲突.

我解决所有冲突,并尝试推动功能.一条消息说我的分支的尖端在功能的后面,我应该从中拉出来.

  hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
    hint: before pushing again.
Run Code Online (Sandbox Code Playgroud)

我从中拉出来(没有重新定位),我遇到了更多的冲突,我解决了.

现在我可以推动功能了.

此时它已全部同步并正常工作.但是如果我从事一些本地工作并尝试从开发中拉动--rebase,我会遇到很多冲突,包括一些我已经解决的问题(我确实已经解决了).

我在这里乱搞什么?

Tim*_*sen 6

当您在另一个分支上重新分支分支时,通常会重写该分支的历史记录.因此,正常推送将失败,因为Git会认为您的分支已经偏离了遥控器上的分支.而不是这样做:

git push origin feature
Run Code Online (Sandbox Code Playgroud)

你应该这样做:

git push --force origin feature
Run Code Online (Sandbox Code Playgroud)

强制推送可能会产生不良副作用,如果您是唯一一个使用此功能分支的人,则可以.

在图表方面,为了更好地了解这里发生的事情,请考虑以下事项:

develop: ... A -- B
              \
feature:        C
Run Code Online (Sandbox Code Playgroud)

由于您已经分支feature,develop因此添加了新的C提交.此外,其他人(也许你也是)已经添加了一个B提交develop.现在,你变基featuredevelop:

develop: ... A -- B
                   \
feature              C'
Run Code Online (Sandbox Code Playgroud)

比较新的feature与您重新定位之前的新对比.你的新C'提交现在位于一个新的基础,B提交,当你去推动时,Git将拒绝它.Git会看到常见的A提交祖先,但它不会知道如何应用新的提交,而不是没有合并,这会破坏rebase的重点.

  • @Souljacker不确定你在问什么.一旦你解决了rebase中的冲突,就强制推送`feature`而你已经完成了,没有更多的冲突了. (2认同)