我正在使用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 - >因为这些操作是在不同的分支中执行的,所以没关系。
答案 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