[英]Merge commit without squash vs with squash option
在日常生活中,我使用SmartGit
作为选择的客户端。 然而,我的团队成员坚持使用 git 原生、非商业 GUI。 我们发现合并提交的外观存在一些差异。
在下图中,您可以看到我的示例 SmartGit 图形输出,其中包含:
master
分支merge commit
选项合并到 mastersimple commit
选项合并分支( with_merge_branch
)之一是通过线将分支与主分支连接来可视化合并操作。 第二个( normal_commit_branch
)没有。
问题是,如何在本地 git 命令中强制执行这两种行为? 即这两个提交之间有什么区别?
两种合并之间的区别仅在于提交历史记录(如您在图表中显示的日志)。
让我们用图表来说明。 在合并之前假设提交历史如下:
A---B---C---D master
\
E---F---G develop
使用的命令是git merge branchname
。 这是合并两个分支的默认方式。
当您通过 SmartGit 中的Merge commit ( git merge develop
) 将develop
分支合并到master
分支时,提交历史将是:
A---B---C---D---M master
\ /
E---F---G develop
它使用--squash
选项合并两个分支,使用的命令是git merge branchname --squash
。
生成工作树和索引状态,就好像真正的合并发生一样(合并信息除外),但实际上不进行提交、移动 HEAD 或记录 $GIT_DIR/MERGE_HEAD(导致下一个 git commit 命令创建一个合并提交)。 这允许您在当前分支之上创建单个提交,其效果与合并另一个分支相同(如果是章鱼则更多)。
当您通过 SmartGit 中的简单提交( git merge develop --squash
)将develop
分支合并到master
分支时,它会从develop
分支到master
分支的更改作为新的普通提交(就像真正的合并发生一样),以及提交历史将是:
A---B---C---D---M master
\
E---F---G develop
merge commits
只是commit
但不同的是他们有不止一个父母。 如你所知提交可能会或可能不会有家长承诺,实际上merge commit
是commit
有多个parent commit
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.