我遇到了一些分支问题,最终在GitHub和本地删除了与该分支相关的所有内容,但我一直得到:
$ git branch
warning: ignoring ref with broken name refs/heads/deleted_branch (conflicted copy 2020-12-18 151952)
我已经完成了git branch -d deleted_branch
,git branch -D deleted_branch
,删除了GitHub上的分支(然后是fetch
&pull
(,但deleted_branch
似乎仍然存在。如何解决此问题?非常感谢。
此名称:
deleted_branch (conflicted copy 2020-12-18 151952)
看起来像是由Dropbox这样的共享系统创建的东西。
Git需要完全控制自己的存储库永远不要将Git存储库放在共享文件夹中1Git有自己的机制来进行适当控制的共享,这是我们用git fetch
和git push
实现的。(你可能会把git fetch
藏在git pull
后面,但它仍然是git fetch
。(
如何[删除坏的分支名称]?
坏名字不是deleted_branch
,而是deleted branch (conflicted copy 2020-12-18 151952)
。删除它的唯一方法可能是手动执行。
不过,首先要确保Git存储库是所有非Git程序无法访问的,这些程序可能会自动篡改它,并试图解决文件的冲突副本。换句话说,将任何共享文件夹的Git存储库移出。请注意,Git存储库通常位于工作树顶层的.git
子目录(子文件夹(中。如果移动整个工作树,包括它的所有子文件夹,也会移动Git存储库。
现在您可以尝试git branch -d "deleted branch (conflicted copy 2020-12-18 151952)"
,其中的双引号保护括号和空格不受shell的影响。如果这有效,那就好了。如果没有,您将需要手动方法。
您可以输入存储库本身:.git
文件夹。在这个文件夹(目录(中,有一个子文件夹名为refs
。其中还有另一个子目录heads
。这个第二个子目录包含每个"子目录"的文件;活动的";树枝列出目录的内容应该会显示错误的名称。例如,在我的一台机器上的一个好的Git存储库中,我得到:
$ ls -l .git/refs/heads
total 4
-rw-r--r-- ... 41 Dec 13 07:47 master
(此存储库只有一个活动分支,名为master
(。请注意,我实际上并没有麻烦输入.git
目录;我在工作树的顶层执行这些操作,使用.git/refs/
访问那里的文件。
如果坏名字出现在这里:
-rw-r--r-- ... 41 <date> deleted_branch (conflicted copy 2020-12-18 151952)
然后可以使用系统的文件删除工具将其删除。在这个盒子上(类似Linux/Unix(,是rm
:
$ rm ".git/refs/heads/deleted_branch (conflicted copy 2020-12-18 151952)"
引号保护括号和空格不受shell的影响,因此rm
命令可以获得完整的名称。这将删除包含分支哈希ID的内部文件——每个文件都有40个字节长,这就是为什么大小为41个字节:40个字节加一个换行符——删除了文件后,分支现在应该不存在了。
如果没有,或者一开始就不在那里,那么Git可能有";包装的";裁判也是。在这种情况下,在文本编辑器中打开文件.git/packed-refs
,该编辑器不会破坏内容(不会将其转换为UTF-16-LE,也不会添加字节顺序标记,也不会将行尾更改为CRLF而不是仅LF,等等(。删除与错误分支名称对应的行,然后保存文件(仍为纯文本(。
1什么,从来没有<插入整个G&这里的S例程>在一些罕见的情况下,你可以这样做,只要你确切地知道你在做什么,以及Git内部是如何工作的,但即使这样,这通常也是一个坏主意。我已经用VirtualBox虚拟机做了一个实验,它可以工作,但有时会变得非常慢——太慢了,最好只使用Git的获取/推送系统。