如何解决忽略已删除分支名称损坏的引用

问题描述

我遇到了一些分支问题,最终删除了与该分支相关的所有内容,无论是在 GitHub 上还是在本地,但我一直收到:

$ git branch
warning: ignoring ref with broken name refs/heads/deleted_branch (conflicted copy 2020-12-18 151952)

我已经完成了 git branch -d deleted_branchgit branch -D deleted_branch删除了 GitHub 上的分支(后跟 fetch & pull)但是 deleted_branch 似乎一直在坚持大约。我该如何解决这个问题? 谢谢!

解决方法

这个名字:

deleted_branch (conflicted copy 2020-12-18 151952)

看起来像是由 Dropbox 等共享系统创建的东西。

Git 需要完全控制自己的存储库。 切勿将 Git 存储库放在共享文件夹中。1 Git 有自己的机制来进行适当控制的共享,我们通过 git fetch 和 {{1 }}。 (您可以将 git push 隐藏在 git fetch 后面,但它仍然是 git pull。)

如何[删除错误的分支名称]?

坏名字不是git fetch而是deleted_branch。删除它的唯一方法可能是手动进行。

不过,首先要确保 Git 存储库是所有非 Git 程序无法访问的,这些程序可能会自动摆弄它并尝试解决冲突的文件副本。换句话说,从任何共享文件夹中out获取 Git 存储库。请注意,适当的 Git 存储库通常位于工作树顶层的 deleted branch (conflicted copy 2020-12-18 151952) 子目录(子文件夹)中。如果您移动整个工作树,包括其所有子文件夹,那么也会移动 Git 存储库。

现在您可以尝试 .git,其中双引号保护括号和空格不受 shell 影响。如果这有效,那很好。如果没有,您将需要手动方法。

您可以输入存储库本身:git branch -d "deleted branch (conflicted copy 2020-12-18 151952)" 文件夹。在这个文件夹(目录)中,有一个名为 .git 的子文件夹。在里面还有另一个名为 refs 的子目录。第二个子目录包含每个“活动”分支的文件。列出目录的内容应该会出现错误的名称。例如,在我的一台机器上的一个好的 Git 存储库中,我得到:

heads

(此存储库只有一个活动分支,名为 $ ls -l .git/refs/heads total 4 -rw-r--r-- ... 41 Dec 13 07:47 master )。请注意,我实际上并没有费心进入 master 目录;我从工作树的顶层执行这些操作,使用 .git 访问那里的文件。

如果坏名出现在这里:

.git/refs/

然后您可以使用系统的文件删除工具将其删除。在这个盒子上(Linux/类Unix),它是-rw-r--r-- ... 41 <date> deleted_branch (conflicted copy 2020-12-18 151952)

rm

引号保护括号和空格不受 shell 影响,因此 $ rm ".git/refs/heads/deleted_branch (conflicted copy 2020-12-18 151952)" 命令获得全名。这将删除保存分支哈希 ID 的内部文件——每个文件的长度为 40 个字节,这就是为什么大小为 41 个字节:40 个字节加上一个换行符——并且删除了文件后,分支现在应该消失了。

如果它没有消失或一开始就不存在,则 Git 也可能“打包”了 ref。在这种情况下,在不会破坏内容的文本编辑器中打开文件 rm(不会将其转换为 UTF-16-LE,也不会添加字节顺序标记,也不会将行尾更改为 CRLF而不是仅 LF 等)。删除与错误分支名称对应的行并保存文件(仍为纯文本)。


1什么,从来没有? 有一些罕见的情况,您可以这样做,只要您确切地知道自己在做什么以及 Git 在内部如何工作,但即便如此,它通常也是一个馊主意。我用 VirtualBox 虚拟机做了一个实验,它可以工作,但有时会变得很慢——慢到最好只使用 Git 的 fetch/push 系统。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...