在远程上挑选无分支的提交用git cherry-pick

7

我正在尝试从Github中挑选一个提交。

https://github.com/angular/angular.js/commit/469b750019adb193f2b973ab841ac87d0d06d4f2

据我所知,它不是任何活动分支的一部分。我在我的本地版本库中尝试了这个:
git remote add upstream https://github.com/angular/angular.js.git
git fetch upstream
git cherry-pick 469b750

我得到了这个错误。
fatal: bad revision '469b750'

我想知道我所尝试的是否可能?我搜索了丢失、孤立和无分支的提交,但没有找到有用的信息。我可以直接复制粘贴来完成,但我想保留历史记录并学习更多关于git的知识。谢谢。


没有办法从一个不可通过引用到达的远程仓库中获取提交记录(这是进行 cherry-pick 的先决条件)。 - Andrew C
很可能,在强制推送后,相关的提交已经变得无法访问(请注意,它的父提交“80ea36256f8ffc6ad59ea5964c919c36327a909d”仍然是可访问的),但是它在Github上仍然显示出来。 (参见https://help.github.com/articles/commit-exists-on-github-but-not-in-my-local-clone/#the-branch-that-contained-the-commit-was-deleted)。 - jub0bs
3个回答

6

这不是完全的挑选,但您可以按照以下方式应用此提交:

  1. Add .patch to Github URL and save it as git patch file:

    wget https://github.com/angular/angular.js/commit/469b750019adb193f2b973ab841ac87d0d06d4f2.patch -o new.patch
    
  2. Apply this commit to your tree with git am:

    git am new.patch
    

应该与挑选樱桃的结果完全相同。


如果您不介意,请在答案中将研究和自助信息结合起来。 - BookOfGreg
1
@BookOfGreg:众所周知,你可以通过在URL后添加“.patch”来从Github获取git格式的补丁。此外,我经常使用git format-patch -1/git am组合而不是cherry-picking——我觉得这更方便。这就是为什么我提出这个作为解决方案的原因。 - mvp

2

感谢确认。在我的研究中,我看到了那篇GitHub文章,它很不错。关于挑选的缺乏任何信息表明这是不可能的。我想看看stackoverflow是否同意。 - Chad von Nau
2
MVP的解决方案需要手动下载并将其放回树中,以便我的背景是正确的,但他实际执行此操作的机制就是解决方案。 :) - BookOfGreg

0
我在Bitbucket上寻找同事今天提交的特定提交,然后转到命令行将该提交(以及一系列其他提交)cherry-pick到另一个实验性git分支中。我注意到出现了“fatal: bad revision '#######'”错误。 这是因为尽管它在Bitbucket上,但它不在我的本地git存储库中...我执行了'git pull'以获取这些提交,然后cherry-pick工作正常。 我猜这可能是解决此错误大部分问题的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接