31

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

git fetch <remote-url> <reference>

这样那些给定的提交就可以使用,而无需添加遥控器或创建分支。

然而,这仅适用于引用,如分支名称或标签,但不适用于特定的哈希,因此不直接在任何地方引用的提交。

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

4

4 回答 4

28

今天我试过:

git fetch origin <commit-hash>

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

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

于 2020-06-19T04:15:02.250 回答
13

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

git fetch --depth=1 <a/remote/repo.git> <full-lenght SHA1>
git cat-file commit $SHA1

如果 SHA1 可以从远程 repo 的分支提示之一“访问”,那么您可以获取它。

注意事项

  • 不过,您需要一个 Git 2.5 远程 repo服务器,它将处理uploadpack.allowReachableSHA1InWant配置(并且您需要将该配置设置为true,以允许单次提交获取)。
  • 而且,如crgarridos回答所示,您需要完整的 SHA1,并且您不能使用git rev-parse,因为您没有所有的提交,正如Jim Hurne评论中所指出的那样。
于 2015-07-16T05:30:08.723 回答
8

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

于 2013-01-17T00:14:02.590 回答
0

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
于 2021-12-16T15:15:38.620 回答