與大多數新來Git的人一樣,我試圖破譯適用於git merge和git rebase的用例,我有一些混淆。我想我終於決定,就所得到的工作副本狀態而言,他們給你同樣的東西。而且,它們都會導致相同的衝突。如果這不正確,請舉一個例子來啓發我。git工作流程:一次性合併和git-rerere - 有什麼意義?
從我的角度來看,使用rebase代替merge(如果您的更改沒有被推或拉)的主要好處是保持歷史線性。我真的不明白的是開發git-rerere的原因。
從手冊中,git-rerere應該在您嘗試解決您之前解決的衝突的情況下爲您提供幫助。我要參考的例子是http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html。
如果您的項目策略是不是不斷地將主線上的更改合併到主題分支(如Linux內核)中,則上述示例說明創建「拋棄」合併提交。從本質上講,將主人合併到你的主題中,運行測試以確保一切仍然有效,然後執行「git reset --hard HEAD ^」,主要是將合併提交丟掉。稍後,當您創建另一個「拋棄」合併提交時,git-rerere可幫助您解決您在第一次拋棄合併中已經解決的衝突。
有人可以解釋爲什麼,而不是經歷創建臨時合併提交的所有麻煩,開發人員不會只是將他的主題重定位到主?這不就是git-rebase的要點 - 獲取更改,但避免合併?這是不是完成了同樣的事情,並假設沒有人拉動你的主題分支變化,這不是一個更簡單的方法嗎?拋出合併+ git-rerere工作流真正適用於您的更改已被推入/拉出的情況嗎?
最後一個問題 - 引用Linus的話說:「但是如果我在你的日誌中看到很多'Merge branch linus',我不會從你那裏拉,因爲你的樹顯然有隨機廢話那不應該在那裏......「Linus也會遇到不斷變硬的問題嗎?
太好了,謝謝你的回覆。錯誤修正註釋 - 來自兩個祖先的最新提交的分支,實際上非常有啓發性。這似乎是一個簡單的想法,但我的印象是,應該從一個主要分支的頂端分支,然後選擇錯誤修復到主人。儘管這種方法似乎更清晰,並且防止必然會阻止重新定位。 – Josh 2010-06-22 18:10:14
@ user370562:這裏的原則是合併上游/上游,並以可能的方式創建分支機構。 (順便說一下,維護分支通常可以直接合並回主;您在v5中所做的錯誤修正可能仍然適用於開發中的v6。)大多數工作流程的建議都強調向上合併 - 例如,請參見man gitworkflows 。很高興有幫助! – Cascabel 2010-06-22 18:58:55