如何摆脱指向origin / master的远程origin / HEAD?

时间:2016-08-29 11:52:40

标签: git

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

现在我在服务器上有这种情况一切正常:

$git branch -a
 * master
 remotes/origin/master

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

$git branch -a
 * master
 remotes/origin/HEAD -> origin/master
 remotes/origin/master

没有什么是严重的,因为一切都应该有效,但为了清洁起见,我想要有相同的情况。

所以我试过了:

git branch -d -r origin/HEAD

答案是:

Deleted remote branch origin/HEAD (was 542d392).

但是我有:

$git branch -a
 * master
 remotes/origin/HEAD -> origin/master

我也试图修剪:

$git pull -p  origin master

但仍然一样......没有机会像其他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

3 个答案:

答案 0 :(得分:2)

->输出中的git branch表示这是一个符号引用:也就是说,引用本身不是指向提交,而是指向另一个引用。 (其他引用也可以是符号,但至少在理想情况下,遵循所有这些名称最终会导致常规引用 - 非符号分支名称 - 指向最终提交。)

这里的问题是git branch不知道如何删除符号引用。当您要求其删除远程跟踪分支origin/HEAD时,它会遵循符号引用,发现它是origin/master的备用名称,并删除origin/master。< / p>

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

git remote set-head <name> --delete

在这种情况下会转换为git remote set-head origin -d(缩短--delete;请参阅the documentation)。

如果您的Git不足以支持此功能,您可以使用&#34; plumbing&#34;命令git symbolic-ref,它可以轻松删除符号引用,但必须将它们全部拼写出来:

git symbolic-ref -d refs/remotes/origin/HEAD

如果你的Git版本足够老,在这里缺少-d标记,则必须手动删除符号引用,如果需要,可以编辑.git/packed-refs(可能不需要,如果你的Git是真的旧它可能永远不会被创建)并删除文件.git/refs/remotes/origin/HEAD(它是一个包含ref:的纯文本文件和另一个分支的名称,或者是如果你的Git 真的旧的话,那就是一个符号链接。

这个名字可能会在git fetch上回来(我在一些Git 1.6。*或1.7。*版本中发生了这种情况,如果我在手动删除参考后正确记住了版本号)。不同版本的Git在这里表现出不同的行为。

答案 1 :(得分:0)

使用GIT版本:

C:\working-directory>git version
git version 2.13.0.windows.1

C:\working-directory>git branch --list -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

这意味着在文件夹中:

C:\working-directory\.git\refs\remotes\origin

有一个名为 HEAD 的文件,仅包含一行:

ref: refs/remotes/origin/master

代表到远程源/主分支的“符号链接”。通过删除此文件,我们可以获得所需的结果:

C:\working-directory>git branch --list -a
* master
  remotes/origin/master

答案 2 :(得分:-1)

看看:

git remote prune <branch>

它基本上删除了本地提交的分支。我不是100%肯定这是你的情况,但值得仔细观察。

编辑:

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

git remote prune origin