为什么git-cherrypick会说nothing to commit?

51

我为以下问题进行了大量搜索,但没有得到任何实质性的信息。

我创建了一个临时分支202116,正在尝试对Gerrit 202116进行cherry-pick操作,但我收到了下面的消息。为什么我无法将此提交进行cherry-pick,并且为什么会出现此错误?

<>git fetch ssh://company@company.com:29418/platform/vendor/company-proprietary/radio refs/changes/25/202116/1 && git cherry-pick FETCH_HEAD
From ssh://company.com:29418/platform/vendor/company-proprietary/radio
 * branch            refs/changes/25/206025/1 -> FETCH_HEAD
# On branch 202116
# You are currently cherry-picking.
#   (all conflicts fixed: run "git commit")
#
nothing to commit, working directory 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

1
我曾经遇到过同样的问题,可以使用 git reset --soft HEAD~1 命令来移除该提交,这样你就能看到哪些文件被添加了。 - Aslam a
6个回答

72

这正是它所说的:你试图挑选的更改已经完全包含在你当前使用的分支中。也就是说,挑选的结果没有任何更改。你可以使用--allow-empty标志创建一个空提交,以表明你尝试挑选,但没有更改需要合并。


4
这可能是因为您尝试挑选一个已经集成/挑选到您当前分支中的提交所导致的。

3
reset --soft HEAD~1

完成后提交更改并将其推送到源代码库。


这并没有完全解决问题,但确实为解决问题提供了帮助。对于第一次挑选的人来说,这对我很有帮助。 - MAK

2

我不知道为什么在fetch之后执行cherry-pick,因为你可能会在HEAD中选择相同的提交。

而且,你真正想要的是git checkout吗?我猜是的。


基本上我想要挑选某些代码……我必须进行一次获取(fetch)和 cherry-pick 操作,这是固定的,你知道为什么 cherry-pick 操作失败了吗? - user1934146
1
根据错误信息,commit cherry-pick 在你的 HEAD 上没有任何更改。你可以检查一下 cherry-pick 的 commit 和 HEAD 的 commit 是否相同。 - pktangyue

0
在我的情况下,我分叉了一个新的分支,然后在该分支上挑选了一些提交。因为这个分支本身是新的且尚未提交到远程,Git认为没有可提交的内容。
请记住,我们通过挑选提交来进行的更改会被视为一个已经提交的提交。这可以通过命令git log --oneline进行验证。
所以,在这种情况下,只需将该分支推送到远程即可。

-1
当我误读我的Bitbucket diff页面时,我得到了这个消息,我把“父提交”错认为我想要的提交。因此,我试图挑选已经在我的工作分支上的父提交 - 因此确实“没有提交内容”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接