[英]Can anyone explain what git cherry-pick <sha> does?
正如我在這里所關注的那樣,我在另一個本地分支中有舊提交[包含abc.cpp,def.cpp]。
幾個月后我想要使用這些更改,但在我目前的分支中,abc.cpp已升級。 那么如果我挑選那么它會將舊的abc.cpp的變化整合到新的abc.cpp [最近的工作目錄副本]中嗎?
git-cherry-pick(1)手冊頁說:
給定一個或多個現有提交,應用每個引入的更改,為每個提交記錄一個新提交。 這需要您的工作樹是干凈的(沒有HEAD提交的修改)。
簡單來說,這意味着git cherry-pick
將提交從一個分支應用到另一個分支,但不會以正確合並的方式保留原始歷史或來自其他分支的祖先。
將其視為應用一系列選定的補丁,而不是兩個歷史分支的完全合並。 顯然,如果你傾向於進行非常小的原子提交,那么采摘櫻桃就像應用一個寫得很好的補丁一樣。 但是,由於您沒有像使用merge或rebase那樣擁有共同祖先,如果您的提交不小且孤立,則可能會有更多沖突需要解決。
挑選櫻桃是一個好主意,在很大程度上取決於你如何構建你的提交。 如果它不適合你,你總是可以用git format-patch
和git apply
手動完成。
是的,這就是它的作用。 cherry-pick
正在應用提交(或其中的一系列)作為您的分支的補丁(好吧, 幾乎作為補丁 )。
您可能會遇到沖突(例如合並分支時),因為您的分支上發生了獨立修改。
請注意,使用git1.8.5 / 1.9(2013年第4季度) ,git cherry-pick現在可以輕松選擇“來自上一個分支”:
就像“
git checkout -
”知道簽出和“git merge -
”知道合並你以前的分支,“git cherry-pick
”現在理解“git cherry-pick -
”從前一個分支中選擇。
參見Hiroshige Umino(yaotti) 提交的182d7d :
cherry-pick
:允許“ -
”縮寫為“ @{-1}
” “
-
”縮寫對於像“checkout
”和“merge
”這樣的“cherry-pick
”很方便。對於一致性而言,“
-
”代表前一個分支的名稱,其中分支名稱被接受,並且它不能表示任何其他東西,如stdin 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.