通緝搬東西: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還不夠強大,還有什麼幫助嗎?
通緝搬東西: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還不夠強大,還有什麼幫助嗎?
這應做到: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。
你的歷史是這樣的:
$ 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
令人驚訝的是,我不知道這種方法,謝謝 – zaratustra