我有两个分支: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