如何从远程分支挑选?

我在挑选樱桃时遇到了麻烦。 在我的本地机器上,我目前在我的“主”分支上。 我想挑选另外一个叫“斑马”的分支。 “斑马”分支是一个远程分支。

所以git状态:

# On branch master nothing to commit (working directory clean) 

好吧,现在我尝试挑选我想要的提交:

 git cherry-pick xyz fatal: bad object xyz 

其中“xyz”是我感兴趣的提交的签名,发生在“zebra”分支上。

所以第一个明显的问题是,为什么不能find我参考的提交? 我真的不明白这是如何工作的,说实话。 git是否在我的工作目录中存储了类似于本地提交数据库的所有其他分支? 执行cherry-pick命令时,是否会去查找本地数据库以查找我正在谈论的提交?

由于“斑马”是一个远程分支,我想我没有在本地的数据。 所以我换了分行:

 git checkout zebra Switched to branch 'zebra' 

所以现在在我的本地机器上,我可以看到目录中的文件正确反映了zerbra的状态。 我切换回主,尝试再次select(希望提交数据现在可用),但有一些问题。

我对这里发生的一切有一个根本性的误解,任何帮助都会很棒。

由于“斑马”是一个远程分支,我想我没有在本地的数据。

你是正确的,你没有正确的数据,但试图以错误的方式解决它。 要从远程源本地收集数据,您需要使用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 

首先需要在本地驱动器上同时提取两个分支数据。

发生了什么事是你试图挑选从分支-a到分支-b,在你当前在分支-b,但分支-a的本地副本没有更新(你需要执行一个git拉两个分支都是首先)。

脚步:
– git checkout分支-a
– git pull起源分支-a
– git checkout分支-b
– git pull起源分支-b
– git cherry-pick <hash>

输出:
[branch-b <hash>]日志数据
作者:作者<作者
1个文件改变,1个插入(+),3个删除( – )

将开发分支合并到master后,我通常会删除开发分支。 但是,如果我想樱桃select提交开发分支,我必须使用合并提交散列,以避免“坏对象”的错误。

SourceTree也可以轻松实现:

  • 结帐您的主分支
  • 打开“日志/历史”选项卡
  • findxyz提交并右键单击它
  • 点击“合并…”

完成:)

正如OP的附录接受的答案:

如果你有问题

 fatal: bad object xxxxx 

那是因为你没有访问该提交。 这意味着你没有本地存储的回购。 然后:

 git remote add upstream REPO_YOU_WANT_THE_COMMIT_FROM git fetch REPO_YOU_WANT_THE_COMMIT_FROM git cherry-pick xxxxxxx 

其中xxxxxxx是您想要的提交哈希。