Ler*_*rve 7 git git-merge git-branch
我将一个feature分支合并回master并删除了feature分支.但它仍然出现在树上.
feature正如预期的那样,左侧列表中的分支消失了,树形可视化中的标签也消失了,同样如预期的那样.
但:
我知道上面截图中的最终提交有两个父母.但我不明白为什么在功能分支上发生的紫罗兰提交不在最终合并提交内master(我认为,这意味着紫罗兰分支在删除之后不再可见).
我在命令行上重播它(只是为了检查SourceTree是否做了我认为它做了什么),最后一步是a git merge feature.相同的情况:
--squash我解除了最后一次合并并尝试了这个:
git merge --squash feature
git commit "Squashed merge"
git delete -D feature # Note that -d did not work; it said "error: The branch 'feature' is not fully merged."
Run Code Online (Sandbox Code Playgroud)
现在它显示了我本来期望的东西.一条直线,没有任何feature分支表示:
我想在上面的所有试验和错误之后我将这些合并发生的事情拼凑在一起,但如果有人能够真正详细解释上述步骤的语义差异,我将不胜感激.
您仍然看到紫色部分,因为您 dit a git merge,它创建了一个组装两个分支的合并提交。由于分支已经发散,这是一个“非快进”合并,这就是为什么历史仍然会显示这种树。
你不想要紫色部分吗?使用git rebase而不是git merge. 在你的情况下:
git checkout mastergit rebase featuregit branch -d feature这将重播分歧之前feature的提交。master您的历史记录中将会有一条直线。
git merge --squash非常类似于变基的操作 - 但您将源分支的所有提交压缩在一次提交中(在您的情况下,您只有一次提交,因此它并没有真正显示)