Git通过哈希获取特定提交

Lop*_*Sae 17 git

例如,Git允许从任何给定的远程和引用中获取

git fetch <remote-url> <reference>
Run Code Online (Sandbox Code Playgroud)

因此,无需添加遥控器或创建分支即可获得提交的提交.

但是,这仅适用于引用,例如分支名称或标记,但不适用于特定哈希,因此不能直接在任何地方引用.

有没有办法从远程获取特定的提交?

crg*_*dos 21

正如今天我试过的:

git fetch origin <commit-hash>
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力!(git 版本 2.20.1)

只要确保<commit-hash>是全长参考

  • 截至 2021 年,这一切都完美,谢谢 (3认同)

Fre*_*Foo 10

不.根据手册,git fetch想要一个refspec,其中最简单的形式是ref,而裸SHA-1不是ref.即,提交必须在遥控器上有一个名称(分支,标签),以便您能够使用fetch它.

  • 到 2021 年,这不再是事实。请参阅@crgarridos的答案,/sf/answers/4372421231/ (4认同)

Von*_*onC 7

请参阅" 从远程git存储库中提取特定提交 ":
使用Git 2.5(2015年7月),您将能够:

git fetch --depth=1 <a/remote/repo.git> $SHA1
git cat-file commit $SHA1
Run Code Online (Sandbox Code Playgroud)

如果SHA1是从远程仓库的一个分支提示"可到达",那么您可以获取它.

警告:你需要一个Git 2.5远程repo 服务器,它将处理uploadpack.allowReachableSHA1InWant配置(你需要将该配置设置为true,以便允许单个提交提取).