在Git中采摘樱桃

时间:2018-04-26 22:00:02

标签: git

我从两年前选择了一个提交并修复了冲突(以及实施更改),但是当我尝试从5个月前选择提交时:

$: git cherry-pick 9f73972f3f619f1357269493e01f07c500d61ed9

On branch get_ndt_up_to_staging_branch
You are currently cherry-picking commit 9f73972.

nothing to commit, working tree clean
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

这是怎么回事?当我查看github时,有问题的提交会对各种文件进行更改。

我做错了吗?

编辑:

当我修复所有冲突时,我提交了它们并试图做出挑选 - 继续,它给了我同样的错误。樱桃挑错了吗?

2 个答案:

答案 0 :(得分:3)

如果提交中的更改已经在当前版本的代码中,通常会出现此错误。在这种情况下,git决定cherry-pick会导致提交不做任何更改,因此它会询问您是否允许使用--allow-empty进行空提交。

如果您修复了冲突并且分辨率的结果再次与工作树和当前HEAD的当前状态匹配,那么您将得到相同的错误。

我建议您仔细查看git show 9f73972并与工作树和存储库的当前状态进行比较。

答案 1 :(得分:-1)

听起来修复冲突的结果是没有必要进行提交。

例如,考虑一个包含单字拼写修复的提交:

--- a/text.txt
+++ b/text.txt
@@ -nn,1 +nn,1 @@
 some context
 is here
-and there was a tyop
+and there was a typo
 in one of the
 lines

假设你决定挑选这个提交。在当前HEAD)提交中,此文件具有:

some context
is here
but there are no typos
in one of the
lines

挑樱操作会告诉您,您正在挑选的更改(尝试将“拼写错误”改为“拼写错误”)与您实际使用的版本之间存在冲突(完全没有那条线。

当您查看文件并考虑它时,您可能会选择使用最新的行,该行没有拼写错误。然后,应用拼写错误修复的效果是不对源进行更改。

当您运行git cherry-pick --continue时,Git会告诉您您没有进行任何更改。你现在必须决定:

  • 您是否正确解决了所有冲突,或者是否通过删除您想要要保留的更改来意外解决冲突?
  • 如果您确实正确解决了所有冲突,是否要进行新提交,其文件与原始提交完全相同?如果是,请使用git commit --allow-empty
  • 如果您不需要任何更改,请使用git cherry-pick --abort(完全结束操作)。这也拼写为git reset(我更喜欢git cherry-pick --abort拼写)。