【问题标题】:Git fetch a specific commit by hashGit 通过哈希获取特定的提交
【发布时间】:2012-12-31 11:10:09
【问题描述】:

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

git fetch <remote-url> <reference>

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

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

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

【问题讨论】:

标签: git


【解决方案1】:

git fetch [remote] [sha] &amp;&amp; git checkout FETCH_HEAD 将允许您检查远程上的提交;即使该 sha 尚未合并(例如在 Gerrit 环境中)。

或者...git fetch [remote] [sha] &amp;&amp; git cherry-pick FETCH_HEAD,如果你想选择它。

例子:

  • git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f &amp;&amp; git checkout FETCH_HEAD
  • git fetch origin d8a9a9395bb0532a0498f800e38ef5e60dfb173f &amp;&amp; git cherry-pick FETCH_HEAD

【讨论】:

    【解决方案2】:

    见“Pull a specific commit from a remote git repository”:
    使用 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 远程仓库 服务器,它将处理 uploadpack.allowReachableSHA1InWant 配置(并且你需要将该配置设置为 true,以便允许单个提交获取)。
    • 并且,如crgarridosanswer 所示,您需要完整的SHA1,并且您不能使用git rev-parse,因为您没有所有提交,正如Jim Hurne 在@987654326 中所指出的那样@。

    【讨论】:

    • 就像这里的其他答案一样,确保 $SHA1 是全长参考。
    • @mkurz 是的,我已经编辑了我的答案以包括使用git rev-parse,从而确保我将始终使用全长 SHA1
    • 不幸的是,git rev-parse 仅在您已经获取远程的所有提交时才能可靠地工作,如果您想要获取的只是单个提交,那么您当然没有。
    • @JimHurne 好点,比你。我已经相应地编辑了答案。
    【解决方案3】:

    今天我试过了:

    git fetch origin <commit-hash>
    

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

    请确保 &lt;commit-hash&gt; 是完整的参考文献

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      猜你喜欢
      • 2014-10-29
      • 2018-06-21
      • 2021-06-13
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多