git与--no-ff和--squash合并

时间:2013-05-30 02:15:35

标签: git merge branch squash fast-forward

我正在使用git flow方式管理我的仓库中的分支,如下所述: http://nvie.com/posts/a-successful-git-branching-model/

因此我应该使用的命令序列如下:

git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff mybranch

但是,在某些情况下,有一件事我想采取不同的做法:

我想保留我的功能分支(mybranch)上的所有提交,但在合并到develop时将它们混合在一起(或压扁)成一个差异。

所以这就是我认为命令序列应该是:

git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff --squash mybranch

如果我将--no-ff--squash合并,我会做错吗?

我犹豫不决,试图将“挤压”和“保存历史”作为正交要求 - 请参阅Squashing all of my commits (including merges) into one commit without altering history

我的理由是,我希望在一个分支(mybranch)上保留历史记录,并在另一个分支(develop)上保留suqash - >因为这些操作是在不同的分支中执行的,所以没关系。

1 个答案:

答案 0 :(得分:1)

我尝试将--squash和--no-ff结合在一起得到:

fatal: You cannot combine --squash with --no-ff.

git merge基本上是一个壁球。在解决冲突之后,它将显示为一个开发提交。合并修订的差异是冲突解决的结果。是的,mybranch的变化得以保留。做“gitk mybranch&”合并后验证。

除了暗影是正确的。不要害怕。创建一个新分支,四处游戏,看看结果如何。

损坏是在你的“git pull --rebase origin develop”命令中完成的。

答案(假设您有基于origin / develop的本地开发分支):

git checkout develop
git pull
git merge --no-ff mybranch