如何摆脱遥远的起源/头指向起源/主? [英] How to get rid of remote origin/HEAD pointing to origin/master?

查看:191
本文介绍了如何摆脱遥远的起源/头指向起源/主?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



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

  $ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆