32

我想知道是否可以从藏匿处采摘樱桃。

git stash save "test cherry-pick from stash"

*git cherry-pick stash@{0}* --> Is this possible?

exception当我在上面尝试时,我得到以下信息command

Error

~/Documents$ git cherry-pick stash@{0}
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given.
fatal: cherry-pick failed
4

3 回答 3

42

问题是一个存储由两个或三个提交组成。存储时,修改后的工作树存储在一次提交中,索引存储在一次提交中,并且(如果使用--include-untracked标志)任何未跟踪的文件存储在第三次提交中。

如果您使用gitk --all并进行存储,您可以看到这一点。

在此处输入图像描述

stash@{0}指向包含工作树的提交。

但是,如果您这样做,您可以从该提交中挑选

git cherry-pick "stash@{0}" -m 1

认为cherry-pick存储是合并,因此需要-m 1参数的原因是存储提交具有多个父级,如图所示。

我不确定你想通过挑选樱桃来实现什么。一种可能的替代方法是从存储中创建一个分支。在那里提交更改并将它们合并到您当前的分支。

git stash branch stashchanges
git commit -a -m "changes that were stashed"
git checkout master
git merge stashchanges
于 2013-05-31T17:05:11.460 回答
2

这对我有用... git cherry-pick -nm1 stash

YMMV

于 2021-01-22T06:53:32.913 回答
-6

我以前没有这样做过。但是cherry-pick上的手册页说它只适用于提交。

   Given one or more existing commits, apply the change each one introduces,
   recording a new commit for each. This requires your working tree to be
   clean (no modifications from the HEAD commit).

存储不是提交,也不会移动 HEAD。所以,这是不可能的[虽然这只是一个猜测]

于 2013-05-31T16:59:06.473 回答