我目前工作的一個分支,並希望一些提交合併到其他分支:重新排序提交
a-b-c-d-e-f-g (branchA)
/
--o-x-x-x-x-x-x-x-x-x-x (master)
\
x-x-x-x-x (branchB)
(字母表示承諾,而「X」是無關的提交。)
但是我注意到集合一些提交是個好主意。我想「連接」提交a,d,e和g到一個補丁並將其提交給主控。提交b和f應該作爲一個提交給branchB。有沒有一個很好的'git'-ish方法來實現它?
我目前工作的一個分支,並希望一些提交合併到其他分支:重新排序提交
a-b-c-d-e-f-g (branchA)
/
--o-x-x-x-x-x-x-x-x-x-x (master)
\
x-x-x-x-x (branchB)
(字母表示承諾,而「X」是無關的提交。)
但是我注意到集合一些提交是個好主意。我想「連接」提交a,d,e和g到一個補丁並將其提交給主控。提交b和f應該作爲一個提交給branchB。有沒有一個很好的'git'-ish方法來實現它?
git rebase --interactive
鏈接:
請在您的鏈接中添加相關詳細信息,以提供完整的,自包含的答案。 SO對「僅鏈接答案」皺眉。具體來說,如何使用'git rebase --interactive'來實現OP的目標? – SherylHohman 2018-02-09 18:40:33
git rebase是你想要的。查看--interactive選項。
請在您的鏈接中添加相關詳細信息,以提供一個完整的,自包含的答案。 SO對「僅鏈接答案」皺眉。 – SherylHohman 2018-02-09 18:37:43
您正在查找的命令是git rebase
,特別是-i/--interactive
選項。
我打算假設您希望在分支A上留下提交c,並且您確實意味着您要將其他提交移動到其他分支,而不是合併,因爲合併非常簡單。讓我們通過操縱分支A.
git rebase -i <SHA1 of commit a>^ branchA
的^
意味着先前的承諾,所以這個命令的意思是衍合分支使用在提交前「一」爲基礎一個開始。 Git會爲您提供此範圍內的提交列表。重新排序,並告訴混帳壁球合適的:
pick c ...
pick a ...
squash d ...
squash e ...
squash g ...
pick b
squash f
現在,歷史應該是這樣的:
c - [a+d+e+g] - [b+f] (branchA)
/
--o-x-x-x-x-x-x-x-x-x-x (master)
現在,讓我們抓住新壓扁提交B + F的branchB。
git checkout branchB
git cherry-pick branchA # cherry-pick one commit, the tip of branchA
與同爲A + d + E + G對主:
git checkout master
git cherry-pick branchA^
最後更新branchA使其指向C:
git branch -f branchA branchA^^
我們現在應該有:
c (branch A) - [a+d+e+g] - [b+f] (dangling commits)
/
--o-x-x-x-x-x-x-x-x-x-x-[a+d+e+g] (master)
\
x-x-x-x-x-[b+f] (branchB)
請注意,如果你有多個提交喲u想分支之間的移動,你可以使用再次衍合(非交互):
# create a temporary branch
git branch fromAtoB branchA
# move branchA back two commits
git branch -f branchA branchA~2
# rebase those two commits onto branchB
git rebase --onto branchB branchA fromAtoB
# merge (fast-forward) these into branchB
git checkout branchB
git merge fromAtoB
# clean up
git branch -d fromAtoB
最後,免責聲明:這是完全有可能重新排序提交以這樣的方式,一些不再幹淨的應用。這可能是因爲你選擇了一個錯誤的命令(在提交補丁前提交補丁)。在這種情況下,您需要中止rebase(git rebase --abort
)。否則,您將不得不智能修復衝突(就像處理合並衝突一樣),添加修復程序,然後運行git rebase --continue
繼續前進。這些說明也由衝突發生時打印的錯誤消息提供。
如果要重新排序只有最後兩次提交,您可以在此git reorder
別名:https://stackoverflow.com/a/33388211/338581
這兩個答案已經給出提正確的命令,但我認爲與基本任務,因爲這一個,它的值得在StackOverflow上有真正的指示,所以我已經發布了一些。 (我很驚訝,我找不到以前需要鏈接的問題。) – Cascabel 2010-04-29 21:10:13