Git 允许从任何给定的远程和引用中获取,例如
git fetch <remote-url> <reference>
这样那些给定的提交就可以使用,而无需添加遥控器或创建分支。
然而,这仅适用于引用,如分支名称或标签,但不适用于特定的哈希,因此不直接在任何地方引用的提交。
有没有办法从远程获取特定的提交?
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-lenght SHA1>
git cat-file commit $SHA1
如果 SHA1 可以从远程 repo 的分支提示之一“访问”,那么您可以获取它。
注意事项:
uploadpack.allowReachableSHA1InWant
配置(并且您需要将该配置设置为true
,以允许单次提交获取)。git rev-parse
,因为您没有所有的提交,正如Jim Hurne在评论中所指出的那样。不。根据手册,git fetch
想要一个 refspec,最简单的形式是 ref,而裸 SHA-1 不是 ref。即,提交必须在遥控器上有一个名称(分支,标签),您才能使用fetch
它。
git fetch [remote] [sha] && git checkout FETCH_HEAD
will allow you to checkout a commit that is on the remote; even if that sha is not yet merged (like in a Gerrit environment).
or... git fetch [remote] [sha] && git cherry-pick FETCH_HEAD
if you wish to cherry-pick it instead.
Examples:
git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f && git checkout FETCH_HEAD
git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f && git cherry-pick FETCH_HEAD