2010-08-12 120 views
2

我有一系列的叉子提交,我想一次應用或拒絕一個叉子到我的叉子。我應該使用git cherry-pick嗎?如何在git中一次提交一系列提交?

+0

'cherry-pick'只能在一次提交時執行; 「櫻桃」適用於一系列作品。 – 2010-08-12 15:14:28

+0

參見http://stackoverflow.com/questions/1670970/how-to-cherry-pick-multiple-commits – 2010-08-12 16:10:38

+0

@jleedev你應該更新你的git install。 git cherry-pick現在允許提交範圍和多個提交。 – wilhelmtell 2010-08-12 18:23:07

回答

4

我會使用一個交互式的rebase此:

git rebase -i master fork-branch 

當Git會詢問你想與每個提交的做什麼,告訴它編輯爲所有這些(搜索和替換挑 - >編輯)。保存並退出,交互式底圖將通過提交,在每個提示處停下來讓你做你的事情。做你的測試,決定是否要保留它。如果你這樣做,只需運行git rebase --continue即可進入下一步。如果您不這樣做,請運行git reset --hard HEAD^重置爲之前的提交,丟棄您不想要的那個,然後轉到git rebase --continue

如果您立即知道您不需要的提交,則可以將它們從列表中刪除,而不是更改選擇以進行編輯。當然,如果我完全誤解了,並且你不需要做任何測試,那麼你幾乎可以忽略前面的段落,並通過有選擇地刪除行來完成。

+0

我認爲這正是我想要的。 – 2010-08-12 15:26:06

+0

@Chas。歐文斯:太棒了!另外,你可能知道這一點,但如果你不想實際移動fork分支,或者如果它是一個你不能真正移動的遠程分支,那麼你應該在該點創建另一個分支來重新綁定。 – Cascabel 2010-08-12 15:54:14

+0

當git-rebase沒有提到任何有關URL的內容時,我很快就明白了這一點。 – 2010-08-12 17:47:06

0

是的。 git cherry-pick COMMIT_SHA將允許你抓住一個特定的提交。不過,你不需要拒絕提交。只是不要挑選他們。

+0

作爲git的新手,這種事情讓我感到困惑。如果我忽略了幾次提交,我會不會被迫徹底挑選它們?就像我在下一次合併時,是不是想將這些被忽略的提交與任何新提交合並? – Hans 2010-08-12 16:11:06

+1

@Hans:你對下一次合併是正確的,所以一般來說,選擇性櫻桃採摘是爲你不知道的情況保留的,決不會合並另一個分支。你應該理想的設計你的分支,這樣你就不必挑選櫻桃。例如,請參閱上一個問題的答案(並且不要錯過評論中的鏈接!)http://stackoverflow.com/questions/3419689/understanding-git-cherry-pick/3420792#3420792您也可以搜索SO瞭解有關工作流的信息,或者發佈一個新問題,如果您想了解更多信息。 – Cascabel 2010-08-12 16:48:28

+0

@Jefromi - 好吧,但是如果你是高手試圖合併origin/master,那麼你基本上需要最終完成這一切?肯定是贊成重分支/合併的論點(當然,這是一個出色的工作流程,但我無法將我的svn過去) – Hans 2010-08-12 20:54:35

相關問題