2015-08-18 136 views
0

通緝搬東西:GIT中替換其間與另一分支提交提交

A--B--C--D--E--F--G--H (master) 
     \ 
     \ 
     L--M--N--O--P (feature) 

想要刪除d-E-F提交,並用L-M-N-O-P替換。最終回購應該是

A--B--C--L--M--N--O--P--G--H (master) 

不幸的是,我的Git還不夠強大,還有什麼幫助嗎?

回答

2

這應做到:git rebase F master --onto feature

這告訴GIT中F..master之間的提交移動到feature。現在你的回購看起來像

A--B--C--D--E--F 
     \ 
     \ 
     L--M--N--O--P   (feature) 
         \ 
         \ 
         G--H (master) 

然後就git branch -d feature來收拾舊feature分支,Git的垃圾回收將採取D--E--F照顧。

對於各種更多的細節和一些很好的示例圖,請通讀rebase docs

+0

令人驚訝的是,我不知道這種方法,謝謝 – zaratustra

0

你的歷史是這樣的:

$ git log --oneline --graph --all 
* 3e680f3 H 
* afd87a5 G 
* 2583117 F 
* 6f44661 E 
* 37ba1cd D 
| * 7c8d70f P 
| * b953a6f O 
| * 7e2f28e N 
| * 95fc381 M 
| * 7ca7fe9 L 
|/ 
* c30b405 C 
* 70fad86 B 
* 18aedd7 A 
* c32e786 Initial commit 

合併的feature分支

$ git me feature 
Merge made by the 'recursive' strategy. 
l | 0 
m | 0 
n | 0 
o | 0 
p | 0 
5 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 l 
create mode 100644 m 
create mode 100644 n 
create mode 100644 o 
create mode 100644 p 

Interactively重訂你的主人,我c32e786是初始的哈希承諾:

$ git rebase -i c32e786 

您將看到一個帶有com列表的文本編輯器在它裏面。刪除不需要的提交,然後重新排序其他或他們,但是你想要:

$ git log --oneline 
ff6a364 H 
4a9d73c G 
7c8d70f P 
b953a6f O 
7e2f28e N 
95fc381 M 
7ca7fe9 L 
c30b405 C 
70fad86 B 
18aedd7 A 
c32e786 Initial commit 
相關問題