我正在尝试从主人那里挑选一个提交并将其放入当前的生产分支。但是,当我执行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 ^,似乎都没有改变任何东西。
我很困惑为什么这对我不起作用。
任何有关如何解决此问题的见解,建议或想法都会有所帮助〜!
答案 0 :(得分:113)
Git正在解决作为无操作的挑选 - 该提交引入的所有更改都是由您当前分支上的某些提交引入的。 (或者那就是Git认为的那样。)验证你所采摘的提交尚未以某种方式合并,无论是合适的合并,rebase / cherry-pick还是零碎的补丁。 (使用git show <commit-id>
查看差异。)
答案 1 :(得分:8)
在我的情况下,这让我很疯狂,因为很明显我想要选择的具体提交不已合并到我当前的分支中。
事实证明有人已经已经在一周之前选择了提交。 更改,但不是特定的SHA,已经在我当前的分支中,我没有注意到它们。
检查您尝试挑选的文件。如果他们已经有了更改,那么已经以另一种方式挑选或添加了提交的版本。因此没有必要再次挑选它。
答案 2 :(得分:4)
另请注意,将一个空文件(例如.gitkeep
)添加到树中会被cherry-pick视为空提交。
答案 3 :(得分:1)
所以,这是另一个令人困惑的情况,可能会出现这种情况:我有以下几点:
我试图挑选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