[英]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.