在分支的生命周期结束时,您应该只合并一次/从主人。特征/主题分支的想法是它只包含与特征相关的更改;当你重复在主人合并时,你会失去这一点。 (你可以阅读什么Junio Hamano, the git maintainer, says about branches。)
你可以做一个“练习”合并,你会扔掉,并使用git-rerere
让Git自动记录你的合并决议,以便他们可以重新使用,当你真的准备合并。有关背景和教程,请参阅http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html。这非常酷,因为它可以让你完成合并工作,而无需明确地提交它,然后当你准备好创建合并时,“神奇地”恢复工作。所以,在最后,你可以做一堆更小,希望更简单,中间的“练习”合并,而不是一个最大的痛苦合并。粗略地说:
# Enable rerere
git config --global rerere.enabled 1
# Start a feature branch
git checkout -b feature
# Hack hack hack
git commit
git commit
# Practice merge
git merge master
# ...then throw the merge commit away, the work is saved by rerere
git reset --hard HEAD^
# Hack hack hack
git commit
# Really merge to master, reusing any saved work from rerere
git checkout master
git merge feature
git branch -d feature
另请参阅http://progit.org/2010/03/08/rerere.html另一个教程。
您还可以定期重新绑定主分支上的主题分支,然后在最后进行合并。
为了处理一个像你目前所在的情况,与一个主要分支(称为feature
),有一系列合并主要与各种正在进行的提交混合,最简单的方法是做压缩合并产生一个“合并”工作树,然后创建一个新的提交(或一系列提交)到main。例如:
git checkout master
git merge --squash feature
git commit
这将产生一个单一提交表示所述树中的特征的头部的状态下,合并到主站。
当然,您也可以对此更改定期合并为master
,留下当前feature
的混乱历史,并且在将来更加干净地工作。例如,只需要
git checkout master
git merge feature
然后继续。
现在我更加困惑。我从来没有听说过git-rerere。我阅读手册页,它有道理,但我失去了如何工作。所以重新绑定不仅可以压缩提交,还可以将原始分支向前移动?我很困惑。我应该在这里采用什么样的实际流程?尤其对于长时间运行的分支 – Micah 2010-12-02 16:59:06