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

bgu*_*uiz 7 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
Run Code Online (Sandbox Code Playgroud)

但是,有些事情我想以不同的方式做,在某些情况下:

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

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

git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff --squash mybranch
Run Code Online (Sandbox Code Playgroud)

如果我要--no-ff与之结合,我会做错事--squash吗?

我犹豫是否尝试这样做源于"挤压"和"保存历史"是如何正交的要求 - 请参阅将我的所有提交(包括合并)压缩到一个提交而不改变历史记录

我的理由是,我想在一个分支(mybranch)上保存历史记录,并在另一个分支(develop)上继续suqash - >因为这些动作是在不同的分支中执行的,这是可以的.

cfo*_*ish 1

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

fatal: You cannot combine --squash with --no-ff.
Run Code Online (Sandbox Code Playgroud)

git merge 基本上就是一个壁球。解决冲突后,它将显示为开发上的一次提交。合并修订版的差异是冲突解决的结果。是的,我的分支上的更改被保留。只需在合并后执行“gitk mybranch &”即可进行验证。

此外,影子是正确的。不要害怕。创建一个新分支,尝试一下,看看结果如何。

损坏是在您的“git pull --rebase origindevelopment”命令中造成的。

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

git checkout develop
git pull
git merge --no-ff mybranch
Run Code Online (Sandbox Code Playgroud)