作为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
所以,当我git push --dry-run upstream master version1
时,我会得到典型的:
! [rejected] master -> master (fetch first)
我的自然反应是重新绑定受影响的分支并保留合并提交:
git fetch upstream
git rebase -p upstream/master
重要的是要注意原始合并提交并不简单,因为版本分支和主服务器之间有很多变化;它需要努力来解决这种合并。
执行上述rebase操作会导致合并冲突,我必须再次解决它;这几乎与我已经完成的工作完全相同。
有更好的方法吗?或者我忘记了一个明显的rebase选项?
答案 0 :(得分:4)
理想情况下,您会使用rerere
“重复使用录制的分辨率”:
在使用相对长寿的主题分支的工作流中,开发人员有时需要反复解决相同的冲突,直到主题分支完成或者合并到“发布”分支,或者发送并接受上游。 / p>
此命令通过在初始手动合并中记录冲突的自动注射结果和相应的手部分辨率结果,并将先前记录的手部分辨率应用于相应的自动注射结果,帮助开发人员完成此过程。
不幸的是,必须在首次合并之前启用此功能:
注意:您需要设置配置变量rerere.enabled才能启用此命令。
据我所知,事后没有捷径可以做这样的事情。我建议全局启用rerere
,然后重做合并:
git config --global rerere.enabled true
将来,此设置可为您节省大量时间!