2010-04-22 30 views
6

我剛剛將一個功能分支重新分配到另一個功能分支(準備將所有東西重新分配給我的主人),它涉及到很多棘手的合併分辨率。我需要在rebase之後執行提交嗎?

rebase是否自動保存爲提交的地方?

這些修改在哪裏生活?我看不到任何東西,或git log --oneline

(因爲當我重訂後合併回我的分支同樣的問題。)

回答

9

Rebase正在將提交移到另一個分支之上。如果移動的提交導致合併衝突,則此提交會發生變化以反映合併解決方案。

rebase的目的是使你的提交看起來好像它們是你改變分支的改變。所以最合乎邏輯的方法是將合併衝突整合到這些提交中。因此不需要額外的提交。

合併是不同的,因爲它是將分支分支合併在一起的明確行爲。在每個分支中沒有提交被改變。衝突解決反映在合併提交中。

4

是的,成功的底墊和合並作出的提交。他們只是不會做出需要解決的衝突的提交,但隨後基本輸出(或合併)會告訴您發生了這種情況,以及如何解決它。

對於rebase,您只需要解決索引中的衝突,然後git rebase --continue

對於合併,您需要進行提交(git commit),但會記住它是合併的事實,並且會提供合適的默認提交消息供您編輯。

+0

這是我所需要的答案 - 短,重點突出。我很欣賞他們爲增加價值而付出的更多努力,但他們確實應該至少在開始時包含上述文字。當我變得更加大膽時,我想我會開始編輯答案,以便排名靠前的答案也可以簡潔地回答「無論如何......無論如何,要感謝你回答我需要的答案。 – msouth 2015-08-13 18:48:43

2

在過去(2006年,前1.5.3和its user manualgit rebasepresented like so

櫻桃採摘一個特殊情況是,如果你想整個分支 移到更新的「基礎」提交。
這由git-rebase完成。
您指定轉移至移動(默認HEAD),並在那裏將其移動到(無默認值), 和:

  • git cherry-picks每個補丁出來的那支,
  • 其應用於目標的頂部,
  • 並將refs/heads/<branch>指針移至新創建的提交。

因此,通過定義,提交都會進行(沒有提交需要做的)

底墊中的一個特殊情況是,當你想將你的工作,移動(並重新創建新)款。
從相同的教程(爲無需重訂後的任何進一步提交的說明):

假設你已經混了兩個特點的發展在當前HEAD,一個名爲「開發」分支。

x-x-x-x (master) 
     \ 
     -f1a-f1b-f1c-f2a-f2b-f2c (dev, HEAD) 

你想將其分成 「DEV1」 和 「裝置2」。假設HEAD是關老爺的一個分支,那麼你可以通過

git log master..HEAD 

看起來或剛拿到的提交的原始清單,

git rev-list master..HEAD 

無論哪種方式,假設您在dev1中計算出您想要的提交列表並創建該分支:

git checkout -b dev1 master 
for i in `cat commit_list`; do 
    git-cherry-pick $i 
done 

     -f1a'-f1b'-f1c' (dev1, HEAD) 
    /
x-x-x-x (master) 
     \ 
     -f1a-f1b-f1c-f2a-f2b-f2c (dev) 

您可以使用列表您編輯生成dev2分支的另一半,但如果你不知道你是否忘了什麼事,或者只是不喜歡這樣做體力勞動,那麼你可以使用git-rebase爲你做。

git checkout -b dev2 dev # Create dev2 branch 
git-rebase --onto master dev1 # Subreact dev1 and rebase 

這會發現,在dev所有補丁,而不是在dev1,運用他們掌握的頂部,並調用結果dev2

 -f1a'-f1b'-f1c' (dev1, HEAD) 
    /
x-x-x-x (master) 
     \ 
     -f2a-f2b-f2c (dev2, HEAD) 
+0

哇!這是令人興奮的,兩種感官(驚人的強大,難以讓我的頭腦) – Benjol 2010-04-22 11:55:54

相關問題