Git允许从任意给定的远程和引用中获取,例如
git fetch <remote-url> <reference>
这样可以使得那些提交的内容可用,而无需添加远程或创建分支。
然而这仅适用于引用,如分支名称或标签,而不适用于特定的哈希值,因此对于那些没有被直接引用的提交也不起作用。
是否有一种方法可以从远程获取特定的提交?
Git允许从任意给定的远程和引用中获取,例如
git fetch <remote-url> <reference>
这样可以使得那些提交的内容可用,而无需添加远程或创建分支。
然而这仅适用于引用,如分支名称或标签,而不适用于特定的哈希值,因此对于那些没有被直接引用的提交也不起作用。
是否有一种方法可以从远程获取特定的提交?
今天我尝试了:
git fetch origin <commit-hash>
它运行得非常好!(git版本2.20.1)
只需确保 <commit-hash>
是完整的引用即可。
git checkout
它,git cherry-pick
它,或者git show
它)
参见:https://dev59.com/TWYq5IYBdhLWcg3wkRi_#70381400 - crgarridos查看 "从远程 Git 存储库中拉取特定提交":
使用 Git 2.5(2015 年 7 月),您可以执行以下操作:
git fetch --depth=1 <a/remote/repo.git> <full-lenght SHA1>
git cat-file commit $SHA1
如果SHA1可以从远程仓库的任一分支末端“到达”,那么您就可以获取它。
注意事项:
uploadpack.allowReachableSHA1InWant
配置(您需要将该配置设置为true
,以允许单个提交提取)。git rev-parse
,因为您没有所有提交,正如Jim Hurne在评论中指出的那样。git rev-parse
,从而确保我将始终使用完整长度的SHA1。 - VonCgit rev-parse
只有在您已经获取了所有远程提交时才能可靠地工作,而这显然不是您所拥有的。 - Jim Hurne不可以。根据手册,git fetch
需要refspec,最简单的形式是一个ref,而裸的SHA-1并不是一个ref。也就是说,提交必须在远程上有一个名称(分支、标签)才能够被fetch
。
git fetch [remote] [sha] && git checkout FETCH_HEAD
可以让你检出一个远程仓库中的提交记录,即使该提交记录尚未合并(比如在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