我在挑选樱桃时遇到了麻烦。在我的本地机器上,我目前在我的“主”分支上。我想从另一个名为“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,再次尝试挑选(希望提交数据现在可用),但我遇到了同样的问题。
我对这里发生的事情有一个根本的误解,任何帮助都会很棒。
由于“斑马”是一个远程分支,我想我在本地没有它的数据。
您是正确的,您没有正确的数据,但试图以错误的方式解决它。要从远程源本地收集数据,您需要使用git fetch. 当你这样做时,git checkout zebra你切换到该分支的状态是你最后一次获取的任何状态。所以先从远程获取:
git fetch
git checkout zebra
# fetch just the one remote git fetch <remote> # or fetch from all remotes git fetch --all # make sure you're back on the branch you want to cherry-pick to git cherry-pick xyz