我正在使用Git Flow方式管理我的存储库中的分支。
因此,我应该使用的命令序列如下: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
结合起来,我会做错什么吗?
我很犹豫是否要尝试这个,因为"压扁"。以及"保护历史";是正交要求(见答案)。
我的理由是我想在一个分支(mybranch
)上保存历史,并在另一个分支(develop
)上压缩——>因为这些操作是在单独的分支中执行的,所以这是可以的。
我尝试将-squash和-no-ff组合在一起,得到:
fatal: You cannot combine --squash with --no-ff.
git合并基本上是一个压缩。在解决冲突后,它将显示为开发上的一个提交。合并修订的差异是冲突解决的结果。是的,我的分支上的变化被保留了下来。请在合并后执行"gitk mybranch &"来验证。
Besides The Shadow是正确的。不要害怕。创建一个新的分支,尝试一下,看看结果如何。
损坏是在你的"git pull——rebase origin development "命令中造成的。
答案(假设您有基于origin/develop的本地开发分支):
git checkout develop
git pull
git merge --no-ff mybranch