【问题标题】:How to a fetch detached Git HEAD from a local repository?如何从本地存储库中获取分离的 Git HEAD?
【发布时间】:2015-04-17 04:45:12
【问题描述】:

pre-commit 钩子(实际上是 Gerrit 中的 ref-update)期间,存储库处于分离的 HEAD 模式(女巫很好)。

执行git clone path/to/my/repo 确实克隆/获取此提交,但我只想执行git fetch 并避免在每次提交时克隆我的存储库(出于各种原因,例如避免每次更改文件时间戳时间)。

在先前克隆的存储库(如上)上执行git fetch --all 不会获取此分离的头部提交。请注意,我确实拥有提交的 SHA1,但 git checkout commit-sha1-here 也不起作用,因为它尚未被获取。

我知道设计上只获取远程分支,但是由于 clone 可以获取分离的头,难道没有办法更新我的克隆存储库以便稍后检索它们吗?我想避免每次都为此创建临时分支

最终目标是更新裸存储库的工作树(分离的 HEAD)。

【问题讨论】:

  • 如果你运行git ls-remote,你会发现 fetch-er 可以看到 fetch-ee 的HEAD(所以理论上这绝对是可能的)。在实践中,简单地将 HEAD:<something> 列为 refspec 应该可以工作,但我还没有对此进行测试。您可以将其作为命令行 refspec 传递,也可以更新给定遥控器的 fetch 设置。
  • @torek 但是我所有的获取尝试都失败了。

标签: git git-fetch


【解决方案1】:

在这里回答我自己的问题。

git pull 分离的 HEAD 似乎在设计上是不允许的,但该分离的 HEAD 的git push 是可能的(即,不是从接收端获取,而是从发送端推送):

$ git push <repository> +<sha1>:refs/remotes/origin/master

然后从接收它的存储库中:

$ git checkout <sha1>  # same as origin/master

注意:如果是当前分支或非基础存储库,默认情况下不允许推送到 refs/remotes/origin/master 而不是直接推送到 master,因此我们推送到源引用。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2018-06-26
    • 2023-04-09
    • 2012-07-06
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多