2013-06-12 23 views
1

說我有一系列提交,看起來像這樣:如何移動的Git分支達樹(反向變基)

h {master} 
^ 
f g {branch1} 
^^
d e 
^/ 
c 
^ 
b 
^ 
a 

我知道我可以在BRANCH1移動通過重訂樹的結束,所以它看起來像這樣:d->f->h->e->g

但是,有沒有什麼辦法可以將分支移動到樹上,所以它看起來像這樣?

h {master} 
^ 
f 
^ 
d g {branch1} 
^^
c e 
^/ 
b 
^ 
a 

回答

2

在登錄branch1時,運行git rebase --onto b c branch1。這應該完成這項工作。

+0

這不行,我測試過了。 b是c和branch1的祖先,所以沒有什麼會發生簡單的rebase到b。 – dyng

+0

它會工作,這就是rebase意味着工作的方式。如果您已經使用'--onto'測試了某些東西,則應該仔細檢查您運行的是哪個命令。如果你想說服自己,去官方文檔(https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html)並搜索'git rebase - 去掉主題topicA topicB ' –

+0

我再次測試它,這次它運行良好,也許我拼寫SHA!第一次。 +1表示感謝。然後我注意到你的解決方案和我的有什麼不同,你的意思是** squash **'c'到'e',而我的意思是**從歷史中刪除** c。也許我誤解了它。 – dyng

2

事實上,它是從BRANCH1而不是底墊的通常含義除去℃。你可以用rebase

git rebase -i b<SHA1> 

交互方式做刪除的pick c<SHA1>和完整的線。

+0

+1因爲這是一個好主意,雖然我認爲 - - 是做同樣事情的正式解決方案。 – Benubird

+0

@Benubird我應該承認,雖然不完全一樣,請參考我在Guillaume Darmont的回答中的評論,以防萬一。真實身份是交互模式下的「squash c 」,而不是刪除它。我以前的做法會放棄引入'c'的修改。 – dyng

+0

是的,刪除線是正確的。我試圖從branch1中刪除'c',而不是壓扁它,並且兩個答案都這樣做。 – Benubird