廖雪峰 Git 分支管理 3 分支管理策略

2021-09-07 10:06:45 字數 2667 閱讀 8704

通常,合併分支時,如果可能,git 會用fast forward模式,但這種模式下,刪除分支後,會丟掉分支資訊。

如果要強制禁用fast forward模式,git 就會在 merge 時生成乙個新的 commit,這樣,從分支歷史上就可以看出分支資訊。

下面我們實戰一下--no-ff方式的git merge

首先,仍然建立並切換dev分支:

$ git checkout -b dev

switched to a new branch 'dev'

修改 readme.txt 檔案,並提交乙個新的 commit:

$ git add readme.txt 

$ git commit -m "add merge"

[dev 6224937] add merge

1 file changed, 1 insertion(+)

現在,我們切換回master

$ git checkout master

switched to branch 'master'

準備合併dev分支,請注意--no-ff引數,表示禁用fast forward

$ git merge --no-ff -m "merge with no-ff" dev

merge made by the 'recursive' strategy.

readme.txt | 1 +

1 file changed, 1 insertion(+)

因為本次合併要建立乙個新的 commit,所以加上-m引數,把 commit 描述寫進去。

合併後,我們用git log看看分支歷史:

$ git log --graph --pretty=oneline --abbrev-commit

* 7825a50 merge with no-ff

|\| * 6224937 add merge

|/* 59bc1cb conflict fixed

...

可以看到,不使用fast forward模式,merge 後就像這樣:

在實際開發中,我們應該按照幾個基本原則進行分支管理:

說白了就是 master 是正式版,dev 是測試版。測試版在測試後確認無誤才能和正式版合併,如果一開始就在正式版上開發或者修改,那如果改的過程剛好有人要使用正式版,那麼就沒辦法保證正式版的安全穩定了。

所以,團隊合作的分支看起來就像這樣:

git 分支十分強大,在團隊開發中應該充分應用。

合併分支時,加上--no-ff引數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

leader 在遠端倉庫建立 2 個分支:master 和 dev

張三和李四轉殖遠端倉庫到本地

張三和李四都切換到 dev 分支

張三建立分支 z3,李四建立分支 l4

張三合併 z3 到 dev,李四合併 l4 到 dev

張三和李四 push dev 到遠端庫(此處會衝突嗎)

leader 把遠端庫里的 dev 合併到遠端庫的 master

答1:[廖雪峰] 合併也是在本地合併,把本地的 dev 合併到本地的 master,再把本地的 master 推到遠端 master。

答2:z3 --> dev 時  先pull origin dev

有衝突時,在自己本地更改。

z3 提交到 --> dev

dev 下 merge z3

如果這時候

l4 --> dev

但是他並沒有先 pull,他提交上去的就會出現衝突 

如果這個時候他也在 dev 下 merge 就會出現衝突。

這時候就需要在 dev 下解決衝突。

如果有衝突的情況下  提交 master 請求時 就會告訴你,解決完衝突才可以提交。

z3 master-->    |

l4 master--> | ----> 遠端 master

w5 master--> |

各自解決各自的衝突,各個 master 之間的衝突 push 上去誰解決呢?

答1:[勤奮的光光2012] 根據我的理解,假設提交的先後順序為 z3 l4 w5, z3 push 上去有衝突就 z3 解決, l4 再拿到的就是 z3 push 後的版本了,所以有衝突是 l4 解決, 依次類推。

延伸閱讀:

[廖雪峰] 分支管理 - 多人協作

摘自:

廖雪峰 Git 分支管理 3 分支管理策略

通常,合併分支時,如果可能,git 會用fast forward模式,但這種模式下,刪除分支後,會丟掉分支資訊。如果要強制禁用fast forward模式,git 就會在 merge 時生成乙個新的 commit,這樣,從分支歷史上就可以看出分支資訊。下面我們實戰一下 no ff方式的git mer...

廖雪峰Git學習日記(六) 分支管理

目錄 一 建立並切換到新的dev分支,可以使用兩種方式 二 切換到已有的master分支,可以使用兩種方式 三 把dev分支的工作成功合併到master分支上 四 刪除dev分支 五 檢視分支情況 小結 git merge dev git branch d dev git branchgit鼓勵大量...

Git10 分支管理

分支就是科幻電影裡面的平行宇宙,當你正在電腦前努力學習 git的時候,另乙個你正在另乙個平行宇宙裡努力學習 svn。如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了 git又學會了 svn!分支在實際中有什麼用呢?假設你準備開發乙個新功能,但...