簡體   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