2011-02-12 131 views

回答

22

試試這個:

git reset --hard A 
git cherry-pick C 
git cherry-pick B 
git cherry-pick D 

可能有git rebase一種方式,但我並沒有真正瞭解它。

+1

git rebase -i一定會讓你做到這一點;但不知道如何以非交互方式實現同​​一事物 – 2011-02-12 23:00:55

+2

所有`git rebase`都使用`git format-patch`,然後`git am`來重新應用它們(可能以不同的順序)。不過,這是一個基本上互動的過程,因爲不按順序重新應用修補程序可能會失敗並需要用戶進行干預。 – 2011-02-13 02:24:43

38

在你的情況,你可以變基互動:git rebase -i HEAD~4然後,你可以重新排列你挑選

例如讓三個文件添加到我們的分支:

git add A 
git commit -m "A" 

git add B 
git commit -m "B" 

git add C 
git commit -m "C" 

你shortlog將是:

$ git shortlog 
(3): 
     A 
     B 
     C 

如果要重新排序B帶C:

$ git rebase -i HEAD~2 
pick 1f9133d B 
pick 33f41be C 

你只需重新排列它們是:

pick 33f41be C 
pick 1f9133d B 

你寫完後,看到shortlog:

$ git shortlog 
(3): 
     A 
     C 
     B 

你可以做同樣的事情再由所有提交-ordering。這就像你看到的是你得到的,這是非常酷:)