我在执行樱桃挑选时遇到了麻烦.在我的本地机器上,我目前在我的"主"分支上.我想从另一个名为"斑马"的分支中挑选."斑马"分支是一个远程分支.
所以git状态:
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
好的,现在我尝试挑选我想要的提交:
git cherry-pick xyz
fatal: bad object xyz
Run Code Online (Sandbox Code Playgroud)
其中"xyz"是我感兴趣的提交的签名,发生在分支"斑马"上.
所以第一个显而易见的问题是,为什么git找不到我引用的提交?说实话,我真的不明白这是如何工作的.对于所有其他分支,git是否在我的工作目录中存储类似于本地提交的数据库?执行cherry-pick命令时,是否会搜索该本地数据库以查找我正在谈论的提交?
由于"斑马"是一个远程分支,我以为我没有本地数据.所以我换了分支:
git checkout zebra
Switched to branch 'zebra'
Run Code Online (Sandbox Code Playgroud)
所以现在在我的本地机器上,我可以看到目录中的文件正确反映了斑马的状态.我切换回主人,尝试再次挑选(希望提交数据现在可用),但我遇到了同样的问题.
我对这里发生的事情有一个根本的误解,任何帮助都会很棒.
Pet*_*ren 168
由于"斑马"是一个远程分支,我以为我没有本地数据.
你没有正确的数据,但试图以错误的方式解决它是正确的.要从远程源本地收集数据,您需要使用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
Run Code Online (Sandbox Code Playgroud)
小智 10
需要首先将两个分支数据拉到本地驱动器上。
发生的情况是您尝试从branch-a 到branch-b,其中您当前位于branch-b,但branch-a 的本地副本尚未更新(您需要执行 git pull首先是两个分支)。
步骤:
- git checkout 分支-a
- git pull origin 分支-a
- git checkout 分支-b
- git pull 原点分支-b
- gitcherry-pick <hash>
输出:
[branch-b <hash>] 日志数据
作者:作者 <作者
1 个文件已更改,1 个插入(+),3 个删除(-)
Cez*_*sto 10
正如OP的附录接受了答案:
如果您遇到问题
fatal: bad object xxxxx
Run Code Online (Sandbox Code Playgroud)
那是因为您无权访问该提交.这意味着您没有本地存储的repo.然后:
git remote add LABEL_FOR_THE_REPO REPO_YOU_WANT_THE_COMMIT_FROM
git fetch LABEL_FOR_THE_REPO
git cherry-pick xxxxxxx
Run Code Online (Sandbox Code Playgroud)
其中xxxxxxx是您想要的提交哈希.
$ git remote add foo git://github.com/foo/bar.git
Run Code Online (Sandbox Code Playgroud)
$ git fetch foo
Run Code Online (Sandbox Code Playgroud)
foo)$ git log foo/master
Run Code Online (Sandbox Code Playgroud)
$ git cherry-pick 97fedac
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121105 次 |
| 最近记录: |