Git 通过哈希值获取特定提交

问题描述 投票:0回答:4

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

git fetch <remote-url> <reference>

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

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

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

git
4个回答
52
投票

今天我尝试过:

git fetch origin <commit-hash>

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

只需确保

<commit-hash>
是完整长度参考


19
投票

参见“从远程 git 存储库拉取特定提交”:
使用 Git 2.5(2015 年 7 月),您将能够执行以下操作:

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

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

注意事项

  • 您需要一个 Git 2.5 远程存储库 server,它将处理
    uploadpack.allowReachableSHA1InWant
    配置(并且您需要将该配置设置为
    true
    ,以便允许单次提交获取)。
  • crgarridosanswer 中所示,您需要完整的 SHA1,并且不能使用
    git rev-parse
    ,因为您没有所有提交,如 评论中 Jim Hurne 所指出的.
  • 而且,正如golvok评论中所指出的:“‘可到达’不包括存储提交,因为我必须在存储提交处创建一个分支来获取它。”

9
投票

不。根据手册,

git fetch
需要一个refspec,其最简单的形式是ref,而裸露的SHA-1不是ref。也就是说,提交必须在远程有一个名称(分支、标签),以便您能够
fetch
它。


2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.