如何更新镜像克隆中的 HEAD 分支?

Cha*_*lie 7 git github

我有一个本地存储库,我通过git clone --mirror <ssh-url>. 然后我使用git remote update --prune.

此时,HEAD指向refs/heads/master

然后我转到我的 github 存储库的 Admin 部分,并更改默认分支。我的所有分支都正常更新,但 HEAD 仍然refs/heads/master是(是的,分支具有不同的哈希值)

我目前的想法是使用git ls-remote获取HEAD和所有分支的哈希值,然后用一些grep/awk魔术,提取HEAD的哈希值,然后选择具有匹配哈希值的第一个分支,并用于git symbolic-ref HEAD <found branch name>本地设置。

但是有没有更简单的方法来获取远程HEAD分支名称(以可以在脚本中更新的方式)?

Chr*_*ial 2

是的,有一个命令可以做到这一点:

git remote set-head origin -a
Run Code Online (Sandbox Code Playgroud)

git help remote

使用 -a,查询远程以确定其 HEAD,然后将符号引用 refs/remotes/<name>/HEAD 设置为同一分支。例如,如果远程 HEAD 指向 next,“git remote set-head origin -a”会将符号引用 refs/remotes/origin/HEAD 设置为 refs/remotes/origin/next。仅当 refs/remotes/origin/next 已存在时这才有效;如果没有,则必须先获取它。

  • 问题是我们正在使用镜像克隆,因此没有远程跟踪分支(为每个远程分支和标签创建本地分支和标签),并且此命令错误并显示“错误:不是有效的引用:refs/remotes” /origin/new-master` 同样有趣的是,它似乎使用 SHA 来确定远程 HEAD,因为如果远程上有多个分支指向 HEAD 修订版,我们会得到“错误:多个远程 HEAD 分支”。请明确选择一个:&lt;分支列表&gt;` (4认同)