不使用 squash 与使用 squash 选项合并提交
Merge commit without squash vs with squash option
在日常生活中,我使用 SmartGit
作为选择的客户。然而,我的团队成员坚持使用 git 本机的非商业 GUI。我们发现我们的合并提交看起来有些不同。
这些是 SmartGit
在请求合并分支时给出的选项:
在下图中,您可以看到我的示例 SmartGit 图形输出,包含:
- 单
master
分支
- 一个分支通过
merge commit
选项合并到 master
- 一个分支与
simple commit
选项合并
其中一个分支 (with_merge_branch
) 正在通过线路将分支与 master 连接起来以可视化合并操作。第二个(normal_commit_branch
)没有。
问题是,如何在本机 git 命令中强制执行这两种行为? IE。这两个提交之间有什么区别?
两种合并之间的区别仅提交历史记录不同(如您在图中显示的日志)。
让我们用图表来说明。假设合并前的提交历史如下:
A---B---C---D master
\
E---F---G develop
合并提交(多个 parents):
使用的命令是git merge branchname
。这是合并两个分支的默认方式。
当您在 SmartGit (git merge develop
) 中通过 Merge commit 将 develop
分支合并到 master
分支时,提交历史将是:
A---B---C---D---M master
\ /
E---F---G develop
简单提交(一次 parent、"squash"):
用--squash
选项合并两个分支,使用的命令是git merge branchname --squash
.
Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make
a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the
next git commit command to create a merge commit). This allows you to
create a single commit on top of the current branch whose effect is
the same as merging another branch (or more in case of an octopus).
当您在 SmartGit (git merge develop --squash
) 中通过 简单提交 将 develop
分支合并到 master
分支时,它从 develop
分支到 master
分支作为一个新的普通提交(就像真正的合并发生一样),提交历史将是:
A---B---C---D---M master
\
E---F---G develop
merge commits
只是 commit
,但区别在于它们有多个 parent。
如您所知,提交可能有也可能没有 parent 提交,实际上 merge commit
是 commit
有多个 parent commit
.
在日常生活中,我使用 SmartGit
作为选择的客户。然而,我的团队成员坚持使用 git 本机的非商业 GUI。我们发现我们的合并提交看起来有些不同。
这些是 SmartGit
在请求合并分支时给出的选项:
在下图中,您可以看到我的示例 SmartGit 图形输出,包含:
- 单
master
分支 - 一个分支通过
merge commit
选项合并到 master - 一个分支与
simple commit
选项合并
其中一个分支 (with_merge_branch
) 正在通过线路将分支与 master 连接起来以可视化合并操作。第二个(normal_commit_branch
)没有。
问题是,如何在本机 git 命令中强制执行这两种行为? IE。这两个提交之间有什么区别?
两种合并之间的区别仅提交历史记录不同(如您在图中显示的日志)。
让我们用图表来说明。假设合并前的提交历史如下:
A---B---C---D master
\
E---F---G develop
合并提交(多个 parents):
使用的命令是git merge branchname
。这是合并两个分支的默认方式。
当您在 SmartGit (git merge develop
) 中通过 Merge commit 将 develop
分支合并到 master
分支时,提交历史将是:
A---B---C---D---M master
\ /
E---F---G develop
简单提交(一次 parent、"squash"):
用--squash
选项合并两个分支,使用的命令是git merge branchname --squash
.
Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit). This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).
当您在 SmartGit (git merge develop --squash
) 中通过 简单提交 将 develop
分支合并到 master
分支时,它从 develop
分支到 master
分支作为一个新的普通提交(就像真正的合并发生一样),提交历史将是:
A---B---C---D---M master
\
E---F---G develop
merge commits
只是 commit
,但区别在于它们有多个 parent。
如您所知,提交可能有也可能没有 parent 提交,实际上 merge commit
是 commit
有多个 parent commit
.