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