git 分之合併和衝突解決

2022-08-30 10:12:11 字數 2907 閱讀 1887

git branch

沒有引數,顯示本地版本庫中所有的本地分支名稱。

當前檢出分支的前面會有星號。

git branch newname

在當前檢出分支上新建分支,名叫newname。

git checkout newname

檢出分支,即切換到名叫newname的分支。

git checkout –b newname master

這個命令將上面兩個命令合併:在master分支上建立分支newname分支並檢出到該分支。

合併操作將兩條或多條分支合併到一起,實際上有好幾種分支合併方法,下面介紹主要的三種:

1.直接合併(straight merge)

把兩條分支上的歷史軌跡合併,交匯到一起。

比如要把dev分支上的所有東東合併到master分支:

首先先到master分支:git checkout master

然後把dev給合併過來:git merge dev

注意沒引數的情況下merge是fast-forward的,即git將master分支的指標直接移到dev的最前方。

換句話說,如果順著乙個分支走下去可以到達另乙個分支的話,那麼git在合併兩者時,只會簡單移動指標,所以這種合併成為快進式(fast-forward)

2.壓合合併(squashed commits):

將一條分支上的若干個提交條目壓合成乙個提交條目,提交到另一條分支的末梢。

把dev分支上的所有提交壓合成主分支上的乙個提交,即壓合提交:

git checkout master

git merge --squash dev

此時,dev上的所有提交已經合併到當前工作區並暫存,但還沒有作為乙個提交,可以像其他提交一樣,把這個改動提交到版本庫中:

git commit –m 「something from dev」

3.揀選合併(cherry-picking):

揀選另一條分支上的某個提交條目的改動帶到當前分支上。

每一次提交都會產生乙個全域性唯一的提交名稱,利用這個名稱就可以進行揀選提交。

比如在dev上的某個提交叫:321d76f

把它合併到master中:

git checkout master

git cherry-pick 321d76f

要揀選多個提交,可以給git cherry-pick命令傳遞-n選項,比如:

git cherry-pick –n 321d76f

這樣在揀選了這個改動之後,進行暫存而不立即提交,接著可以進行下乙個揀選操作,一旦揀選完需要的各個提交,就可以一併提交。

當兩條分支對同乙個檔案的同乙個文字塊進行了不同的修改,並試圖合併時,git不能自動合併的,稱之為衝突(conflict)。解決衝突需要人工處理。

比如當前在master分支,想把dev分支merge過來,結果產生了乙個衝突,開啟檔案內容可以看到這麼乙個衝突:

<<<<<<< head

test in master

*****==

test in dev

>>>>>>> dev

<<<<<<<標記衝突開始,後面跟的是當前分支中的內容。

head指向當前分支末梢的提交。

*****==之後,>>>>>>>之前是要merge過來的另一條分支上的**。

>>>>>>>之後的dev是該分支的名字。

對於簡單的合併,手工編輯,然後去掉這些標記,最後像往常的提交一樣先add再commit即可。

有些分支沒有必要長期儲存,比如分支中的**已經打了標籤並已發布,或者實驗分支已經成功完成工作或中途廢棄等等。 

注意:打了標籤的分支,git在刪除該分支時,從版本樹起始到此標籤間的全部歷史軌跡均會保留,此時刪除分支操作只是刪除分支本身的名稱,因此可以說該分支沒有必要長期儲存。

而在其他版本控制工具中,刪除分支通常意味著刪除分支上的所有歷史軌跡,所以不能因為打了標籤就認為其沒有必要儲存。

刪除乙個分支dev2:

git branch –d dev2

注意不能刪除當前所在分支,需要轉到別的分支上。

如果要刪除的分支已經成功合併到當前分支,刪除分支的操作會直接成功。

如果要刪除的分支沒有合併到當前所在分支,則會出現提示,如果確定無須合併而要直接刪除,則執行命令:

git branch –d dev2

進行強刪。

重新命名分支:

git branch –m oldname newname

-m不會覆蓋已有分支名稱,即如果名為newname的分支已經存在,則會提示已經存在了。

如果改成-m就可以覆蓋已有分支名稱了,即會強制覆蓋名為newname的分支,這種操作要謹慎。

《版本控制之道——使用git》(pragmatic version control using git)

git分支管理策略:

git reference: 

git合併衝突解決 本地合併衝突

feature分支合併到master起衝突,不要在gitlab上修改衝突,拉取在本地合併衝突 不在gitlab上修改合併的原因 在gitlab上合併會雙向合併兩次,會影響乙個不需要合併分支 命令順序 1.將feature分支的 全部上傳 2.切換分支到master git checkout mast...

Git合併解決衝突

人生不如意之事十之 合併分支往往也不是一帆風順的。準備新的feature1分支,繼續我們的新分支開發 git checkout b feature1 switched to anew branch feature1 修改readme.txt最後一行,改為 creating a new branch ...

git 找到衝突 git合併衝突解決方法

1 git merge衝突了,根據提示找到衝突的檔案,解決衝突 如果檔案有衝突,那麼會有類似的標記 2 修改完之後,執行git add 衝突檔名 3 git commit 注意 沒有 m選項 進去類似於vim的操作介面,把conflict相關的行刪除掉 4 直接push就可以了,因為剛剛已經執行過相...