【发布时间】:2012-12-09 15:45:55
【问题描述】:
我在挑选樱桃时遇到问题。在我的本地机器上,我目前在我的“主”分支上。我想从另一个名为“zebra”的分支中挑选提交。 “斑马”分支是一个远程分支。
所以 git 状态:
# On branch master
nothing to commit (working directory clean)
好的,现在我尝试挑选我想要的提交:
git cherry-pick xyz
fatal: bad object xyz
其中“xyz”是我感兴趣的提交的签名,它发生在分支“zebra”上。
所以第一个明显的问题是,为什么 git 找不到我引用的提交?老实说,我真的不明白这首先是如何工作的。对于所有其他分支,git 是否在我的工作目录中本地存储类似提交数据库的东西?执行cherry-pick 命令时,它会搜索本地数据库以找到我正在谈论的提交吗?
由于“斑马”是一个远程分支,我想我在本地没有它的数据。所以我切换了分支:
git checkout zebra
Switched to branch 'zebra'
所以现在在我的本地机器上,我可以看到目录中的文件正确地反映了斑马的状态。我切换回master,再次尝试cherry-pick(希望提交数据现在可用),但我遇到了同样的问题。
我对这里发生的事情有一个根本的误解,任何帮助都会很棒。
【问题讨论】:
-
从概念上讲,一切似乎都是正确的。你确定你使用了正确的哈希(你称之为签名)的提交吗?试试 'git show
' 来验证。 -
嗨,是的,肯定的——我的两个分支都在 github 上,我可以用它们来找到提交页面。如果我理解的话,我的机器在本地的状态是 git 在 'master' 的上下文中无法找到来自 'zebra' 的哈希。我是否需要以某种方式告诉它本地也存在“斑马”?
-
哦,执行 'git show xyz' 会给出相同的错误“致命:坏对象”。 (我正在用正确的哈希替换 xyz)。
-
澄清一下,我可以使用我的“xyz”哈希来查看 github 上的提交而不会出现问题,例如:“github.com/me/test/commit/xyz”。
标签: git