如何摆脱指向原点/主站的远程原点/HEAD?

koa*_*aok 4 git

最近,我在两个不同的复制服务器上更改了我的原始遥控器。

现在我在服务器上遇到了这种情况,一切正常:

$git branch -a
 * master
 remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

在另一台服务器上我有这个

$git branch -a
 * master
 remotes/origin/HEAD -> origin/master
 remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

没什么大不了的,因为一切都应该有效,但是为了清洁起见,我希望有相同的情况。

所以我试过:

git branch -d -r origin/HEAD
Run Code Online (Sandbox Code Playgroud)

答案是:

Deleted remote branch origin/HEAD (was 542d392).
Run Code Online (Sandbox Code Playgroud)

但后来我有:

$git branch -a
 * master
 remotes/origin/HEAD -> origin/master
Run Code Online (Sandbox Code Playgroud)

我也尝试修剪:

$git pull -p  origin master
Run Code Online (Sandbox Code Playgroud)

但还是一样......没有机会像另一个srvr一样把它清理干净。

任何提示?

非常感谢

编辑

回答评论“git update-ref -d refs/remotes/origin/HEAD 之后发生了什么”

    koala@server:~/www$ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    koala@server:~/www$ git update-ref -d refs/remotes/origin/HEAD
    koala@server:~/www$ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
    koala@server:~/www$ git branch -r
      origin/HEAD -> origin/master
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 6

->git branch输出表明这是一个象征性的参考:即,参考点本身没有提交,而是另一种参考。(其他引用也可以是符号的,但至少在理想情况下,遵循所有这些名称最终会导致常规引用——一个非符号分支名称——指向最终提交。)

这里的问题是git branch不知道如何删除符号引用。当您要求它删除远程跟踪分支时origin/HEAD,它遵循符号引用,发现它是 的替代名称origin/master,然后删除origin/master

git remote命令至少在更高版本的 Git 中知道如何删除它:

git remote set-head <name> --delete
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这将转换为git remote set-head origin -d(缩短--delete;请参阅文档)。

如果您的 Git 不够新,无法支持这一点,您可以使用“管道”命令git symbolic-ref,它可以轻松删除符号引用,但您必须将它们完整拼写出来:

git symbolic-ref -d refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

如果您的 Git 版本足够旧而缺少-d此处的标志,您将必须手动删除符号引用,.git/packed-refs如果需要,通过编辑(可能不需要它,如果您的 Git真的很旧,它可能永远不会被创建)并删除文件.git/refs/remotes/origin/HEAD(它要么是一个包含ref:另一个分支名称的纯文本文件,要么是一个符号链接,如果你的 Git真的很旧)。

无论如何,该名称可能会再次git fetch出现(我在某些 Git 1.6.* 或 1.7.* 版本中遇到过这种情况,如果我在手动删除引用后正确记住了版本号)。不同版本的 Git 在这里表现出不同的行为。


Sim*_* PA -1

看一眼 :

git remote prune <branch>
Run Code Online (Sandbox Code Playgroud)

它基本上删除了本地提交的分支。我不能 100% 确定这是您的情况,但值得仔细研究。

编辑:

事实上,这可能更好:删除所有不再存在的本地分支

git remote prune origin
Run Code Online (Sandbox Code Playgroud)