Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何摆脱指向原点/主控点的远程原点/磁头?_Git - Fatal编程技术网

Git 如何摆脱指向原点/主控点的远程原点/磁头?

Git 如何摆脱指向原点/主控点的远程原点/磁头?,git,Git,最近,我在两个不同的复制服务器上更改了我的源远程设备 现在我在服务器上遇到了这种情况,一切正常: $git branch -a * master remotes/origin/master 在另一台服务器上,我有这个 $git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master 没什么大不了的,因为一切都应该正常,但为了清洁起见,我希望有相同的情况 所以我试着: git b

最近,我在两个不同的复制服务器上更改了我的源远程设备

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

$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更新ref-d refs/remotes/origin/HEAD后发生了什么”

看看:

git remote prune <branch>

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

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

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

git remote set-head <name> --delete
如果您的Git版本足够旧,无法在此处使用
-d
标志,则必须手动删除符号引用,如果需要,可以编辑
.Git/packed refs
(可能不需要,如果您的Git非常旧,则可能永远无法创建),并删除文件
.Git/refs/remotes/origin/HEAD
(它要么是一个包含
ref:
和另一个分支名称的纯文本文件,要么是一个符号链接(如果您的Git非常旧)

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

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

您是否尝试删除根级别上的.git文件夹并再次手动设置原点?删除.git文件夹似乎太过激烈。尤其是因为我在生产服务器上。我尝试删除.git/config文件并重新创建远程。这将不起作用我的git版本为1.7尝试过:git update ref-d refs/remotes/origin/HEAD不起作用了什么使用
git update ref-d refs/remotes/origin/HEAD
?如果您在之后立即运行
git branch-r
,符号引用应该消失。如果您在之后运行
git fetch
git remote update
,它可能会回来,正如我所指出的。如果它一直回来,基本上就没有其他方法了n升级您的Git版本。koala@server:~/www$git branch-a*主遥控器/origin/HEAD->origin/master遥控器/origin/masterkoala@server:~/www$git update ref-d refs/remotes/origin/HEADkoala@server:~/www$git branch-a*主遥控器/origin/HEAD->origin/masterkoala@server:~/www$git branch-r origin/HEAD->origin/masterno注释中的格式:@torek我编辑了我的问题,以使我的上述注释显示格式。但基本上你的最新建议不起作用。啊哈,你需要
git symbolic ref-d
,而不是
git update ref-d
。我也会修正答案,因为
git symbolic ref-d
是应该可以工作的管道命令嗯。
C:\working-directory\.git\refs\remotes\origin
ref: refs/remotes/origin/master
C:\working-directory>git branch --list -a
* master
  remotes/origin/master