繁体   English   中英

合并提交而没有壁球与壁球选项

[英]Merge commit without squash vs with squash option

在日常生活中,我使用SmartGit作为选择的客户端。 然而,我的团队成员坚持使用 git 原生、非商业 GUI。 我们发现合并提交的外观存在一些差异。

这些是SmartGit在请求合并分支时提供的选项: SmartGit 提交类型

在下图中,您可以看到我的示例 SmartGit 图形输出,其中包含:

  • 单个master分支
  • 一个分支通过merge commit选项合并到 master
  • 一个分支与simple 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 commitcommit有多个parent commit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM