【发布时间】:2017-07-23 03:17:23
【问题描述】:
我有两个分支:A 和 B。
-
A的提交历史:a <- b <- c; -
B的提交历史:a <- h <- i;
假设这里只有一个文件。
- 在提交
b中,我添加了一些文本,例如“foo”。 - 在提交
c中,我添加了一些文本,例如“bar”。 - 然后我在
B分支上git cherry-pick c。我以为cherry-pick只会选择c中的更改到分支B。但是,它会将foo和bar添加到分支B。这显然不是我想要的。
因此,cherry-pick 将选择自祖先提交a 以来提交c 中涉及的那些文件的所有更改。那正确吗?如果我只想选择从b 到c 的差异并将其应用于i,该怎么办?
更新具体步骤
- 初始化一个 git repo;
-
添加文件
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添加到文件并发出提交c。test.txt现在是:first line added in commit b added in commit c second line -
签出
dev分支并提交h。test.txt现在是:first line second line adding by commit h git cherry-pick <commit c SHA1 ID>到cherry-pick 提交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。
谢谢!
【问题讨论】:
-
@ArunG 谢谢!我知道
cherry-pick是什么意思。但我只是感到困惑,它不等于获取该提交的差异并将差异应用于目标分支。它还包含该提交中的 NOT 内容。 -
@tamlok,运行
git show a(显然用相关的提交 SHA 替换a)来检查提交实际上会引入的更改,以了解为什么您可能会从提交b获得增量。您始终可以使用-n标志运行cherry-pick来停止并手动删除不需要的更改。 -
请显示命令的确切顺序(包括您用于显示精选提交的内容)。我认为你误解了你所看到的。
-
@MikeMB 请查看更新。谢谢!
标签: git cherry-pick