我的工作流中有許多短命的分支,我希望將它們分開。所以,我打算使用git config --add merge.ff false
。然而,當我正在做一個拉(我理解的是獲取+合併) - 然後我想要一個快進行爲,以避免不必要的額外提交。合併分支時使用pull和no-ff時快速轉發
這是一件好事嗎?這可能嗎?
我的工作流中有許多短命的分支,我希望將它們分開。所以,我打算使用git config --add merge.ff false
。然而,當我正在做一個拉(我理解的是獲取+合併) - 然後我想要一個快進行爲,以避免不必要的額外提交。合併分支時使用pull和no-ff時快速轉發
這是一件好事嗎?這可能嗎?
注:Git的2.0(Q2 2014)將與commit b814da8推出配置push.ff
:
pull.ff::
默認情況下,Git不會創建合併的提交,當額外合併提交是的後裔當前提交。相反,當前分支的尖端被快速轉發。
- 設置爲false時,此變量告訴Git在這種情況下創建額外的合併提交(等同於從命令行提供--no-ff選項)。
- 僅當設置爲僅允許進行這種快進合併(相當於從命令行提供
--ff-only
選項)。
初始答案(2012年10月)
嘗試:
git pull --ff
應該優先考慮你的合併配置設置。
它會將--ff
選項傳遞給git pull命令中的基礎合併。
謹防--no-ff
選項雖然,如「Understanding the Git Workflow」
提到有足夠的標誌,你可以強制Git的行動,你認爲它應該,而不是它的方式希望的方式。但這就像使用像錘子一樣的螺絲刀;它完成了工作,但它做得不好,需要更長的時間,並且會損壞螺絲刀。
請考慮常見的Git工作流如何分崩離析。
Create a branch off Master,
do work,
and merge it back into Master when you’re done
這其中大部分表現爲你想到,因爲既然你支法師變的時間。然後有一天你將一個功能分支合併到Master中,但是Master並沒有發生分歧。而不是創建一個合併提交的,Git的指向主最新提交的特性分支,或「快進」(圖)
不幸的是,你的功能分支包含關卡承諾,頻繁的提交該備份的工作,但捕獲代碼處於不穩定狀態。現在這些提交與Master的穩定提交沒有區別。您可以輕鬆地重新陷入災難。
因此,您添加了一條新規則:「當您在功能分支中合併時,請使用
–no-ff
強制進行新的提交。」這會完成工作,然後繼續。然後有一天,你發現在生產中關鍵的錯誤,你需要時,剛開始追查。您運行
bisect
但保持在檢查點提交上着陸。你放棄手工調查。您縮小錯誤到一個文件中。您運行
blame
以查看它在過去48小時內的變化情況。你知道這是不可能的,但blame
報告文件在幾周內沒有被觸及。
原來blame
報告初始的時間變化犯,合併不能當。幾周前您的第一次檢查點提交修改了此文件,但是此更改在今天已合併。
no-ff
創可貼,折斷對開,怪罪奧祕都是你用螺絲刀當作錘子的所有症狀。
有關詳細信息,請參見:
注:'混帳配置push.ff only'將在Git中2.0幫助。參見[編輯我的回答以下(http://stackoverflow.com/a/12798995/6309) – VonC
@VonC我認爲你的意思'pull.ff',而不是'push.ff'。在您的答案編輯中也會出現一次。 – Kelvin
我知道這是不一樣的,但我相信'git pull --rebase'可以解決您的問題。 –