2014-09-02 75 views
6

由于在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

你*有*吗?我通常也会变质,但我也一直处于你不适合的地步,然后以标准合并的方式进行。 – musiKk 2014-09-02 07:55:25

+0

当然,我可以推'D,E,M(Z)'而不是'D',E'',但我更愿意保持历史尽可能干净,因为我可以:) – 2014-09-02 08:20:19

+1

我听到你的声音。这取决于你的情况。我从事合并工作需要数小时。我对清洁历史的热爱至今依然存在。 :) – musiKk 2014-09-02 08:23:11

回答

3

理想情况下,你会“重用记录分辨率”与rerere

在工作流程采用相对长期的特性分支,开发人员有时需要一遍又一遍,直到话题分支是解决同一冲突完成或者合并到“发布”分支,或发送并接受上游)。

此命令通过记录初始手动合并冲突automerge结果和相应的手的决心的结果,以及应用先前记录的手的分辨率为它们相应的automerge结果有助于这个过程中的显影剂。

注:

不幸的是,你首先要做的合并之前此功能,必须启用您需要设置,以使该命令rerere.enabled配置变量。

据我所知,在事后没有办法做这样的事情。我建议启用rerere,同时将重做合并:

git config --global rerere.enabled true 

在未来,这种设置可以为您节省大量的时间!

+0

我*想*这可能正是我所需要的,很好找! :) – 2014-09-02 03:23:10

+2

快捷追溯使这里rerere应该是简单的'混帐配置rerere.enabled真实的; git checkout y; git merge -s我们的--no-commit C; git read-tree -um HEAD D; git commit; git checkout master'。 – jthill 2014-09-02 04:52:12

+0

@jthill对我来说看起来并不简单,但如果它有效,这将是一个很好的除了这个答案或一个单独的:) – 2014-09-02 09:00:28