通过本地存在的非平凡合并提交重新进行上游更改

Ja͢*_*͢ck 6 git push git-rebase merge-conflict-resolution

作为php-src的开发人员,我最近发现自己处于以下情况:

A   B   C
o---o---o         version1
         \
o---o-----o---o   master
x   y     D   E

o---o---o         upstream/master
x   y   z
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时,我会git push --dry-run upstream master version1得到典型的:

! [rejected]        master -> master (fetch first)
Run Code Online (Sandbox Code Playgroud)

我的自然反应是重新绑定受影响的分支并保留合并提交:

git fetch upstream
git rebase -p upstream/master
Run Code Online (Sandbox Code Playgroud)

重要的是要注意原始的合并提交并不简单,因为版本分支和主服务器之间有很多变化; 它需要努力来解决这样的合并.

执行上述rebase操作会导致合并冲突,我必须再次解决它; 这几乎与我已经完成的工作完全相同.

有一个更好的方法吗?或者我忘记了一个明显的rebase选项?

Chr*_*ris 4

理想情况下,您将“重用记录的分辨率” rerere

在使用相对较长生命周期的主题分支的工作流中,开发人员有时需要一遍又一遍地解决相同的冲突,直到主题分支完成合并到“发布”分支,或者发送出去并被上游接受。

此命令通过在初始手动合并时记录冲突的自动合并结果和相应的手动解决结果,并将先前记录的手动解决结果应用到其相应的自动合并结果,在此过程中为开发人员提供帮助。

不幸的是,必须在首次合并之前启用此功能:

注意:您需要设置配置变量 rerere.enabled 才能启用此命令。

据我所知,事后做这样的事情没有捷径。我建议rerere全局启用,然后重新进行合并:

git config --global rerere.enabled true
Run Code Online (Sandbox Code Playgroud)

将来,此设置可以为您节省大量时间!

  • 此处追溯启用 rerere 的快捷方式应该只是“git config rerere.enabled true;” git checkout y;git merge -s 我们的 --no-commit C; git read-tree -um HEAD D; git 提交;git checkout master`. (2认同)