【发布时间】:2016-12-16 08:01:56
【问题描述】:
我知道git cherry-pick 是一个用于应用指定提交更改的命令,但我想我只是不太了解它的工作方式。
假设一个回购行为是这样的:
git init
echo a>a
git add .; git commit -am 'master add line a'
git checkout -b dev
echo b>>a
git commit -am 'dev add line b'
echo c>>a
git commit -am 'dev add line c'
git checkout master
git cherry-pick dev
我认为cherry-pick 命令会运行良好并将文件a 更改为:
a
c
但实际上我收到了以下消息:
error: could not apply 08e8d3e... dev add line c
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
然后我运行:
git diff
输出:
diff --cc a
index 7898192,de98044..0000000
--- a/a
+++ b/a
@@@ -1,1 -1,3 +1,6 @@@
a
++<<<<<<< HEAD
++=======
+ b
+ c
++>>>>>>> 11fff29... abc
所以我的问题是:为什么会出现 git-diff 显示的冲突?在这种情况下,cherry-pick的工作细节是什么?
【问题讨论】:
-
Git cherry pick 是一种选择并将来自另一个分支的单个提交应用到当前分支的方法。它本质上是对一个提交进行合并,因此您可能会遇到冲突。您所看到的不一定有任何问题。
-
@TimBiegeleisen 但是如果我运行
git merge dev,没有冲突,说明我合并成功了... -
git cherry-pick dev对我来说甚至没有意义,因为您指定的是分支名称而不是提交。 -
@TimBiegeleisen
dev指的是分支dev的最后一次提交,所以我认为git cherry-pick dev没有问题。 -
考虑合并许多提交,例如进行小的更改,每个提交都是连续的。在这种情况下,可能不会有冲突,因为 Git 可以处理每个小的更改。当你挑选最新的提交时,Git 可能会看到一些戏剧性的事情,如果没有人工干预,它就无法解决。这是一种解释。
标签: git cherry-pick git-cherry-pick