git cherry-pick不起作用


110

我正在尝试从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 ^,但似乎都没有改变任何东西。

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

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


当我不小心尝试挑选错误的提交时,这种情况就发生了。使用gitk时有时会发生。
cst1992 '16

Answers:


141

Git解决了选择问题,因为该提交所引入的所有更改已由您当前分支上的某些提交所引入。(或者无论如何,这都是Git的想法。)验证您尚未选择的提交是否已经以某种方式进行了合并,无论是适当的合并,变基/樱桃选择还是零碎的补丁。(git show <commit-id>用于查看差异。)


16
感谢您的建议,事实证明已经进行了摘樱桃,我需要做的就是将其推送到github。
杰伊·泰勒

是的,我没有意识到这是在检查具有提交ID的文件的内容。我去寻找日志中的提交ID,找不到它。事实证明它已经合并英寸
mparaz

不幸的是,这不是问题的唯一原因。当我进行提交时,我遇到了完全相同的情况,它还原了一些先前的提交,而当我在另一个分支上挑选它时,该历史记录没有还原所做的更改(即,没有选择该还原后的提交) )。当然,那是我的错。但是在这种情况下,可以预期git应该以冲突状态失败,而不是尝试变得太聪明,这会导致用户困惑。
阿尔萨姆·皮萨连科

如果您还原了一个合并提交并且要被挑选的提交驻留在还原的分支上,则可能会发生这种情况。
马特

11

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

事实证明,有人已经在一个星期前选择了提交。的变化,而不是特定的SHA,已经在我目前的分支,我没有注意到它们。

检查您要尝试挑选的文件。如果他们已经进行了更改,则已经选择或以其他方式添加了提交的版本。因此,无需再次选择它。


我很确定特定的提交在被樱桃选择引入时不会在您的分支中,因为樱桃选择将是一个新的哈希,对吗?还是我误会了?
msouth '17

@msouth我最初从其他答案中删除的是“提交已被合并”,但是我可以看到它不在我的分支中。您对樱桃选择始终是一个新SHA的看法是正确的。
pkamb

是的,当我键入时,我在想的是“特定的提交(由哈希标识)”。我的语言不准确。我经常回头看输出,git log --graph --pretty --decorate --oneline以查看给定的SHA是否在我的分支中。请参阅下面的我的答案,有关如何基于认为提交消息指示更改的情况也将其弄混的情况-在某些情况下它不是,这就是导致我最初提出此问题的原因。一个人的大脑往往会做出这些捷径,它们有时会回来咬你。
msouth

6

另外请注意,将一个空文件(例如.gitkeep)添加到树被Cherry-pick视为一个空提交。


在我的情况下,我尝试尝试之前有一个还原提交(即还原一个空的提交本身),所以我猜任何空的东西都可能导致此消息出现。
lidkxx

3

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

git log屏幕截图

我试图挑选9a7b12e显然不算什么-它甚至试图在git log输出的那一行告诉我4497428是我真正想要的。(我所做的只是查找提交消息,并获取了我看到的第一个哈希值)。无论如何,只是想让人们知道,还有另一种方法可以欺骗您,选择不采取任何行动。


10
这对您毫无解释地投票没有很大帮助-这是我所遇到问题的确切再现,导致我在搜索中发现了该问题。如果您有改善建议,请在评论中告诉我,而不是仅仅投票。
msouth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.