git cherry-pick不起作用

时间:2011-08-15 23:33:21

标签: git branching-and-merging cherry-pick

我正在尝试从主人那里挑选一个提交并将其放入当前的生产分支。但是,当我执行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'

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

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

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

7 个答案:

答案 0 :(得分:113)

Git正在解决作为无操作的挑选 - 该提交引入的所有更改都是由您当前分支上的某些提交引入的。 (或者那就是Git认为的那样。)验证你所采摘的提交尚未以某种方式合并,无论是合适的合并,rebase / cherry-pick还是零碎的补丁。 (使用git show <commit-id>查看差异。)

答案 1 :(得分:8)

在我的情况下,这让我很疯狂,因为很明显我想要选择的具体提交已合并到我当前的分支中。

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:1)

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

git log screenshot

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

答案 4 :(得分:1)

我和您一样有同样的问题,也许这会为您提供帮助,所以请确保您没有与HEAD分离,然后尝试将它们摘下来,这意味着先这样做:

git checkout master

然后使用:

git cherry-pick <your-commit-hash>

答案 5 :(得分:0)

发生此错误的另一个可能原因是传递给 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

答案 6 :(得分: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