2011-06-16 143 views

回答

194

git cherry-pick <commit>命令允許您從任何分支中進行單次提交,並且實質上在您的工作分支中重新綁定它。

Chapter 5 of the Pro Git book explains it better than I can,完整的圖和等;查找標題爲「重新激活和櫻桃採摘工作流程」的部分。 (The chapter on Rebasing也是不錯的閱讀。)

最後,還有一些good comments on the cherry-picking vs merging vs rebasing in another SO question

+0

問題:說commit'A'從'master'分支出來,你做了一些工作,通過'E'創建子提交'B'。說'E'只有'D'加了1行。如果你把'E'櫻花選到''master',它是否應用*所有*從'A'到'E'到'master'分支的變化,或者它只會*應用從'D'變化到'E',即它只增加了1行到'master'?如果是前者,我如何實現後者? (除了手動複製和粘貼) – chharvey 2014-03-25 10:44:31

+4

git cherry-pick -n 如果你不想讓櫻桃挑選自動提交。 – 2015-06-19 18:09:59

5

如果BranchA未被推送到遠程,那麼您可以使用rebase然後簡單merge來重新排序提交。如果可能,最好在之上使用merge,因爲它不會創建重複的提交。

git checkout BranchA 
git rebase -i HEAD~113 
... reorder the commits so the 10 you want are first ... 
git checkout BranchB 
git merge [the 10th commit] 
2

來源:https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

的另一種方式從一個分支移動介紹工作,另一個是櫻桃採摘它。 Git中的櫻桃選擇就像是一次單一提交的變形。它需要在提交中引入的修補程序,並嘗試將其重新應用到當前所在的分支上。如果您在主題分支上有多個提交,並且您只想集成其中一個,或者您只在主題分支上提交了一個提交,並且您更願意挑選它而不是運行rebase,那麼這非常有用。例如,假設你有一個項目,看起來像這樣:

enter image description here

如果你想拉提交e43a6到你的主分支,你可以運行

$ git cherry-pick e43a6 
Finished one cherry-pick. 
[master]: created a0a41a9: "More friendly message when locking the index fails." 
3 files changed, 17 insertions(+), 3 deletions(-) 

這拉引入了相同的變化在e43a6中,但您會得到一個新的提交SHA-1值,因爲應用的日期不同。現在你的歷史看起來是這樣的:

enter image description here

現在你可以刪除你的主題分支,放棄你不想在拉提交的

相關問題