143

我正在尝试从 master 中挑选一个提交并将其放入当前的生产分支。但是,当我执行时git cherry-pick <SHA-hash>,我只会收到以下消息:

# On branch prod_20110801
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#   site/test-result/
 nothing added to commit but untracked files present (use "git add" to track)
 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'

注意:我尝试过重置和重置 --hard HEAD^,但似乎都没有改变任何东西。

我很困惑为什么这对我不起作用。

任何有关如何解决此问题的见解、建议或想法都会有所帮助~!

4

7 回答 7

173

Git 正在将cherry-pick 解析为无操作——该提交引入的所有更改都是由您当前分支上的某个提交引入的。(或者这就是 Git 的想法,无论如何。)验证您正在挑选的提交尚未以某种方式合并,作为适当的合并、rebase/cherry-pick 或零碎补丁。(git show <commit-id>用于查看差异。)

于 2011-08-15T23:36:05.503 回答
16

就我而言,这让我发疯了,因为很明显我想要挑选的特定提交没有合并到我当前的分支中。

事实证明,一周前已经有人挑选了提交。更改,但不是特定的SHA,已经在我当前的分支中,我没有注意到它们。

检查您尝试挑选的文件。如果他们已经进行了更改,则提交的版本已经被精心挑选或以另一种方式添加。因此没有必要再次挑选它。

于 2015-04-14T21:49:24.880 回答
6

另请注意,cherry-pick 将向树中添加空文件(例如.gitkeep)视为空提交。

于 2016-05-09T12:38:14.353 回答
3

所以,这可能会出现另一个令人困惑的情况:我有以下情况:

git 日志截图

我试图挑选 9a7b12e 这显然没什么——它甚至试图在 git log 输出的那一行告诉我 4497428 是我真正想要的。(我所做的只是寻找提交消息并抓住我看到的第一个哈希)。无论如何,只是想让人们知道还有另一种方法可以欺骗您尝试挑选无操作。

于 2017-05-21T04:17:00.373 回答
1

发生此错误的另一个可能原因是传递给 git cherry-pick 的提交序列。您必须选择第一个提交作为开始提交,然后及时前进。

我有同样的问题,在我的情况下,提交历史如下,

   Commit Sequence   976e364---2b162b6---x...etc

我跑到下面,它产生了与问题相同的错误/问题,

git cherry-pick 2b162b6 976e364   //this is wrong commit sequence 

上述情况的根本问题是提交顺序。

git cherry-pick 976e364 2b162b6   //this is correct commit sequence

在 git 官方文档中,它声明为

注意:提交序列确实很重要。

# Find the range of commits you wish to re-add to your branch.
# then use cherry-pick to add them back to the branch
git cherry-pick start..end

# If you wish to include the start commit as well add the ^
# This will result in a cherry-pick of the start commit included as well 
git cherry-pick start^..end
于 2021-05-05T03:07:35.480 回答
0

我和你有同样的问题,也许这会对你有所帮助,所以请确保你没有脱离 HEAD 然后尝试挑选它们,这意味着首先要做:

git checkout master

然后使用:

git cherry-pick <your-commit-hash>
于 2020-11-21T14:52:36.147 回答
0

我对这个主题有不同的变化,但我从未找到正确的解决方案。

git checkout master
git rm .travis.yml
git commit -m "Travis build no longer needed"
git checkout <mybranch>
git cherry-pick <lastcommit>

这因空提交错误而失败。我验证了分支上仍然存在相同的文件。在这种情况下,我只是重新提交了分支上的提交,但这令人沮丧。

centos8 上的 git 2.27.0

于 2021-07-21T22:43:31.897 回答