最近,我在两台不同的复制服务器上更改了原始遥控器。
现在我在服务器上有这种情况一切正常:
$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
答案 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