Git 允许从任何给定的远程和引用中获取,例如
git fetch <remote-url> <reference>
以便那些给定的提交可用,而无需添加遥控器或创建分支。
但这仅适用于引用,例如分支名称或标签,但不适用于特定哈希,因此不会在任何地方直接引用的提交。
有没有办法从远程获取特定提交?
今天我尝试过:
git fetch origin <commit-hash>
它就像一个魅力! (git 版本 2.20.1)
只需确保
<commit-hash>
是完整长度参考
参见“从远程 git 存储库拉取特定提交”:
使用 Git 2.5(2015 年 7 月),您将能够执行以下操作:
git fetch --depth=1 <a/remote/repo.git> <full-length SHA1>
git cat-file commit $SHA1
如果 SHA1 可以从远程存储库的分支提示之一“访问”,那么您就可以获取它。
注意事项:
uploadpack.allowReachableSHA1InWant
配置(并且您需要将该配置设置为 true
,以便允许单次提交获取)。git rev-parse
,因为您没有所有提交,如 评论中 Jim Hurne 所指出的.不。根据手册,
git fetch
需要一个refspec,其最简单的形式是ref,而裸露的SHA-1不是ref。也就是说,提交必须在远程有一个名称(分支、标签),以便您能够fetch
它。
git fetch [remote] [sha] && git checkout FETCH_HEAD
将允许您签出远程上的提交;即使该 sha 尚未合并(就像在 Gerrit 环境中一样)。
或者...
git fetch [remote] [sha] && git cherry-pick FETCH_HEAD
如果你想挑选它。
示例:
git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f && git checkout FETCH_HEAD
git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f && git cherry-pick FETCH_HEAD