如何从本地存储库中获取分离的 Git HEAD?
How to a fetch detached Git HEAD from a local repository?
在 pre-commit
挂钩期间(实际上是 Gerrit 中的 ref-update
),存储库处于分离的 HEAD 模式( 很好)。
做一个 git clone path/to/my/repo
做 clone/fetch 这个提交,但我只想做一个 git fetch
并避免每次提交时克隆我的存储库(出于各种原因比如避免每次都更改文件时间戳)。
在先前克隆的存储库(如上)上执行 git fetch --all
不会 获取此分离的 head 提交。请注意,我 do 具有提交的 SHA1 但 git checkout commit-sha1-here
也不起作用,因为它尚未被提取。
我确实知道只有远程分支被获取是设计的,但是由于 clone 可以获取分离的头,有没有办法更新我的克隆存储库以检索它们之后?我想避免每次都为此创建一个临时分支。
最终目标是更新裸存储库的工作树(分离的 HEAD)。
在这里回答我自己的问题。
分离 HEAD 的 git pull
似乎不是设计所允许的,但是分离 HEAD 的 git push
是可能的(即,不是从接收端获取,而是从发送端推送):
$ git push <repository> +<sha1>:refs/remotes/origin/master
然后从接收它的存储库中:
$ git checkout <sha1> # same as origin/master
注意:如果是当前分支或非基础存储库,默认情况下不允许推送到 refs/remotes/origin/master
而不是直接推送到 master
,因此我们推送到原始引用。
在 pre-commit
挂钩期间(实际上是 Gerrit 中的 ref-update
),存储库处于分离的 HEAD 模式( 很好)。
做一个 git clone path/to/my/repo
做 clone/fetch 这个提交,但我只想做一个 git fetch
并避免每次提交时克隆我的存储库(出于各种原因比如避免每次都更改文件时间戳)。
在先前克隆的存储库(如上)上执行 git fetch --all
不会 获取此分离的 head 提交。请注意,我 do 具有提交的 SHA1 但 git checkout commit-sha1-here
也不起作用,因为它尚未被提取。
我确实知道只有远程分支被获取是设计的,但是由于 clone 可以获取分离的头,有没有办法更新我的克隆存储库以检索它们之后?我想避免每次都为此创建一个临时分支。
最终目标是更新裸存储库的工作树(分离的 HEAD)。
在这里回答我自己的问题。
分离 HEAD 的git pull
似乎不是设计所允许的,但是分离 HEAD 的 git push
是可能的(即,不是从接收端获取,而是从发送端推送):
$ git push <repository> +<sha1>:refs/remotes/origin/master
然后从接收它的存储库中:
$ git checkout <sha1> # same as origin/master
注意:如果是当前分支或非基础存储库,默认情况下不允许推送到 refs/remotes/origin/master
而不是直接推送到 master
,因此我们推送到原始引用。