如何摆脱遥远的起源/头指向起源/主? [英] How to get rid of remote origin/HEAD pointing to origin/master?
问题描述
现在我在服务器上遇到这种情况,一切正常:
$ git branch -a
* master
遥控器/原点/主控制器
在另一台服务器上,我有这个
$ git分支-a
* master
遥控器/ origin / HEAD - >原产地/主人
遥控器/原产地/主人
清洁的缘故,我想有相同的情况。
所以我试过:
git branch -d -r origin / HEAD
答案是:
删除远程分支源/ HEAD(是542d392)。
但是我有:
$ git branch -a
* master
remotes / origin / HEAD - >原产地/主人
我也尝试修剪:
$ git pull -p origin master
但仍然同样的......没有机会像其他srvr一样干净。
任何提示?
非常感谢
编辑
回答评论git update-ref -d refs / remotes / origin / HEAD
koala @ server:〜/ www $ git branch -a
* master
remotes / origin / HEAD - >源/主
远程/源/主
考拉@服务器:〜/ www $ git update-ref -d参考/远程/源/头
考拉@服务器:〜/ www $ git分支-a
* master
遥控器/ origin / HEAD - > origin / master
koala @ server:〜/ www $ git branch -r
origin / HEAD - > origin / master
- >
在 git分支
输出中表示这是一个符号引用:也就是说,引用本身并不指向提交,而是指向另一个参考。 (其他引用也可以是符号的,但至少在理想情况下,所有这些名称最终会导致常规引用 - 一个非符号分支名称 - 指向最终提交。)
这里的问题是 git branch
不知道如何删除符号引用。当您要求它删除远程跟踪分支 origin / HEAD
时,它会跟随符号引用,发现它是 origin / master的替代名称,并删除
origin / master
。
命令在最新版本的Git中至少会知道如何删除它: git remote set-head< name> - 删除
在这种情况下会转换为 git remote set-head原始-d
(缩短 - 删除
;参见文档)。
如果你的Git不够新, ,您可以使用plumbing命令 git symbolic-ref
,它可以轻松删除符号引用,除非您必须完整拼写它们:
<$
$ b $
如果你的Git版本已经足够大,在这里缺少 -d
标志,你将不得不手动删除符号引用,方法是编辑 .git / packed-refs
如果需要的话(可能不需要它,如果你的Git真的是旧的,它可能永远不会被创建)并删除文件。混帐/ refs / remotes / origin / HEAD
(这是一个纯文本文件,包含 ref:
和另一个分支的名称,或者是一个符号链接,如果你的Git真的是旧的)。
这个名字可能会在 git fetch code>(我在某些Git 1.6。*或1.7。*版本中遇到过这种情况,如果我手动删除ref后记得版本号正确)。不同版本的Git在此显示不同的行为。
Recently I've changed my origin remotes on two different replicated servers.
Now I have this situation one on server everything is ok:
$git branch -a
* master
remotes/origin/master
On the other server I have this
$git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Nothing serious since everything should work but, for cleaning sake, I'd like to have the identical situation.
So I tried:
git branch -d -r origin/HEAD
Answer is:
Deleted remote branch origin/HEAD (was 542d392).
But then I have :
$git branch -a
* master
remotes/origin/HEAD -> origin/master
I also tried to prune :
$git pull -p origin master
But still the same... no chance yet to have it clean like the other srvr.
Any hint?
Many thanks
EDIT
Answering comment "what happened after 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
The ->
in the git branch
output indicates that this is a symbolic reference: that is, the reference itself points not to a commit, but rather to another reference. (That other reference can also be symbolic, but at least ideally, following all these names eventually leads to a regular reference—a non-symbolic branch name—which points to the final commit.)
The problem here is that git branch
does not know how to delete a symbolic reference. When you ask it to delete the remote-tracking branch origin/HEAD
, it follows the symbolic reference, discovering that it's an alternate name for origin/master
, and deletes origin/master
instead.
The git remote
command does, in later versions of Git at least, know how to remove this:
git remote set-head <name> --delete
which in this case would translate to git remote set-head origin -d
(shortening --delete
; see the documentation).
If your Git is not new enough to support this, you can use the "plumbing" command git symbolic-ref
, which easily deletes symbolic references, except that you must spell them out in full:
git symbolic-ref -d refs/remotes/origin/HEAD
If your Git version is old enough to lack the -d
flag here, you will have to remove the symbolic reference manually, by editing .git/packed-refs
if needed (it may not be needed and if your Git is really old it may never be created) and removing the file .git/refs/remotes/origin/HEAD
(which is either a plain-text file containing ref:
and the name of the other branch, or is a symbolic link if your Git is really old).
The name may come back anyway on git fetch
(I had this happen to me in some Git 1.6.* or 1.7.* versions, if I remember the version numbers correctly, after I deleted the ref manually). Different versions of Git exhibit different behaviors here.
这篇关于如何摆脱遥远的起源/头指向起源/主?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!