gpt4 book ai didi

git - 如何摆脱指向原点/主控的远程原点/HEAD?

转载 作者:行者123 更新时间:2023-12-03 22:39:35 25 4
gpt4 key购买 nike

最近我在两个不同的复制服务器上更改了我的原始 Remote 。

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

$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

最佳答案

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

这里的问题是 git branch不知道如何删除符号引用。当你要求它删除远程跟踪分支origin/HEAD ,它遵循符号引用,发现它是 origin/master 的替代名称, 并删除 origin/master反而。
git remote至少在更高版本的 Git 中,命令确实知道如何删除它:

git remote set-head <name> --delete

在这种情况下将转换为 git remote set-head origin -d (缩短 --delete ;见 the documentation)。

如果您的 Git 不够新,无法支持此功能,您可以使用“管道”命令 git symbolic-ref ,这很容易删除符号引用,除非您必须完整地拼出它们:
git symbolic-ref -d refs/remotes/origin/HEAD

如果您的 Git 版本足够老而缺少 -d在此处标记,您必须手动删除符号引用,方法是编辑 .git/packed-refs如果需要(可能不需要它,如果你的 Git 真的很旧,它可能永远不会被创建)并删除文件 .git/refs/remotes/origin/HEAD (它可以是一个包含 ref: 和另一个分支名称的纯文本文件,或者如果你的 Git 真的很旧,它是一个符号链接(symbolic link))。

无论如何,这个名字可能会在 git fetch 上回来。 (我在某些 Git 1.6.* 或 1.7.* 版本中遇到过这种情况,如果我没记错版本号,在我手动删除了 ref 之后)。不同版本的 Git 在这里表现出不同的行为。

关于git - 如何摆脱指向原点/主控的远程原点/HEAD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39205681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com