2012-08-16 166 views
1

比方說,如果我有2個分支 topmaster 如果我的特性分支,並運行git rebase master它重訂主或重訂特性分支?git的變基混亂

git rebase --help給了我這個

假設以下的歷史存在,當前分支是「主題」:

   A---B---C topic 
      /
     D---E---F---G master 

從這一點上,可以採取如下操作的結果:

 git rebase master 
     git rebase master topic 

將是:

      A'--B'--C' topic 
         /
      D---E---F---G master 

注意:後一種形式僅僅是git checkout主題和git rebase master的縮寫。當rebase退出時,主題將保持爲已取出的分支。

如果我想實現這個D---E---F---G---A---B---C master,我應該切換到master並運行git rebase -i topic

如果我跑git rebase -i topic嘗試壁球A,B,C到C成爲D---E---F---G---C master,我得到noop

+0

你想完成什麼?當你完成後,你想讓樹看起來像什麼?根據手冊(見上文) – R0MANARMY 2012-08-16 01:24:31

+0

,這似乎是另一回合? – 2012-08-16 01:25:05

+0

您是否試圖將'topic'變更爲'master'? – R0MANARMY 2012-08-16 01:26:08

回答

2

假設你開始了一棵樹,看起來像這樣

  A---B---C topic 
     /
    D---E---F---G master 

你」馬上要運行2個命令git rebase master,使它看起來像這樣

     A'--B'--C' topic 
        /
    D---E---F---G master 

然後從master運行git merge topic,這將做一個快進合併,你會與樹看起來像這樣

       topic 
          /
    D---E---F---G---A---B---C -- master 

我可以只簽出主人和運行git的變基話題結束了?

運行,將導致樹看起來命令這樣

       topic 
          /
    D---A---B---C---E---F---G -- master 

這是rebase(有點編輯)git的文檔,希望這將幫助:

在當前分支中提交但不在上游中的所有更改都將保存爲速度拉里區。

如果你是topic和運行git rebase master,這意味着提交A,B和C正在進入一個臨時區域。

當前分支被重置爲上游。這與git reset具有完全相同的效果--hard 上游

此時樹的臨時狀態看起來像這樣

    topic 
       /
    D---E---F---G -- master 

先前保存到臨時區域,然後再應用到當前分支的提交,一個接一個,在訂購。

已保存到臨時區域的提交A,B,C被「重新發送」到您當前正在使用的分支topic

       topic 
          /
    D---E---F---G---A---B---C -- master 

運行從mastergit rebase topic將執行完全相同的步驟,不同之處而不是把提交A,B,C到臨時區,這將令提交E,F G到暫存區。

+0

這是實現D --- E --- F --- G --- A --- B --- C主通過rebase的唯一途徑??我可以只結賬主人並運行'git rebase topic'嗎? – 2012-08-16 01:33:18

+0

查看我的編輯..... – R0MANARMY 2012-08-16 01:36:19

+0

我明白了,這樣做很有意義,所以我應該首先在本地主題分支上重新壓縮以壓縮提交,然後將更改合併到主然後再推送? – 2012-08-16 01:42:20