我有兩個分支:A
和B
。git cherry-pick不只是挑選提交的差異
A
的提交歷史:a <- b <- c
;B
的提交歷史:a <- h <- i
;
假設這裏只有一個文件。
- 在提交
b
中,我添加了一些文本,如「foo」。 - 在提交
c
,我添加了一些文本,如「酒吧」。 - 然後我
git cherry-pick c
在B
分支。我認爲cherry-pick
只會選擇c
到分支B
的更改。但是,它會將foo
和bar
添加到分支B
。這顯然不是我想要的。
因此,cherry-pick
會挑選那些文件的所有變化觸動了提交c
因爲祖先犯下a
。是對的嗎?如果我只想從b
挑選差異至c
並將其應用於i
?
更新的確切步驟
- 初始化一個git回購;
添加文件
test.txt
併發出第一次提交init commit
。test.txt
現在是:first line second line
創建一個新的分支
dev
但留在分支master
;將
added in commit b
添加到文件併發出提交b
。test.txt
現在是:first line added in commit b second line
添加
added in commit c
該文件併發出commitc
。test.txt
現在是:first line added in commit b added in commit c second line
退房
dev
分支發出commith
。test.txt
現在是:first line second line adding by commit h
git cherry-pick <commit c SHA1 ID>
來摘櫻桃提交c
到提交h
。衝突消息:
index 6a8dc57,594c6ec..0000000 @@@ -1,4 -1,4 +1,9 @@@ first line ++<<<<<<< HEAD ++======= + added in commit b + added in commit c ++>>>>>>> 06ce9b1... commit c adding another line second line + +adding by commit h
看到了嗎?
cherry-pick
也帶來了改變b
。
謝謝!
這可能會幫助你的http: //stackoverflow.com/questions/9339429/what-does-cherry-picking-a-commit-with-git-mean –
@ArunG謝謝!我知道「櫻桃挑」是什麼意思。但我只是困惑,它不等於獲取該提交的差異並將diff應用於目標分支。它還包含該提交中的內容** NOT **。 – tamlok
@tamlok,運行'git show a'(顯然用相關提交SHA替換'a')來檢查提交實際會引入的更改,以瞭解爲什麼您可能會從提交'b'獲得增量。您始終可以使用'-n'標誌運行'cherry-pick'來停止並手動修剪不需要的更改。 – miqid