git merge之 no ff 的作用

2021-10-01 02:57:43 字數 1430 閱讀 4793

–no-ff 在這的作用是禁止快進式合併。

git 合併兩個分支時,如果順著乙個分支走下去可以到達另乙個分支的話,那麼 git 在合併兩者時,只會簡單地把指標右移,叫做「快進」(fast-forward),比如下圖:

注意:::這種是master沒有前進的情況,所以會這樣,如果master也前進了,則可以不用這個,但是為了保險起見,嘚使用–no-ff

a---b---c feature

/d---e---f master

要把 feature 合併到 master 中,執行以下命令

$ git checkout master

$ git merge feature

結果就會變成

a---b---c feature

/ master

d---e---f

因為 feature 就在 master 的下游,所以直接移動了 master 的指標,master 和 feature 都指向了 c。而如果執行了 git merge --no-ff feature 的話,是下面的結果:

a---b---c feature

/ \

d---e---f-----------g master

由於 --no-ff 禁止了快進,所以會生成乙個新的提交,master 指向 g。從合併後的**來看,結果其實是一樣的,區別就在於 --no-ff 會讓 git 生成乙個新的提交物件。為什麼要這樣?通常我們把 master 作為主分支,上面存放的都是比較穩定的**,提交頻率也很低,而 feature 是用來開發特性的,上面會存在許多零碎的提交,快進式合併會把 feature 的提交歷史混入到 master 中,攪亂 master 的提交歷史。所以如果你根本不在意提交歷史,也不愛管 master 幹不乾淨,那麼 --no-ff 其實沒什麼用。不過,如果某一次 master 出現了問題,你需要回退到上個版本的時候,比如上例,你就會發現退乙個版本到了 b,而不是想要的 f,因為 feature 的歷史合併進了 master 裡。

Git 合併時 no ff 的作用

在許多介紹 git 工作流的文章裡,都會推薦在合併分支時,加上 no ff引數 git checkout develop git merge no ff feature no ff在這的作用是禁止快進式合併。git 合併兩個分支時,如果順著乙個分支走下去可以到達另乙個分支的話,那麼 git 在合併兩...

git merge 命令的使用

我們把dev分支的工作成果合併到master分支上 git merge dev updating d46f35e.b17d20e fast forward readme.txt 1 1 file changed,1 insertion git merge 命令用於合併指定分支到當前分支。若果合併後要...

git merge和rebase的區別

git merge 會生成乙個新得合併節點,而rebase不會 比如 d e test a b c f master 使用merge合併 d e a b c f g test,master 而使用rebase則 a b d e c f test,master 使用git pull時預設是merge,...