LMLPHP后院

解决GIT本地的远程分支删不掉的问题技术

maybe yes 发表于 2016-11-22 21:20

分享一个 GIT 使用实际遇到的问题。

问题描述,使用 git branch -av 查看分支,可以看到 origin/ 下面有某个分支,使用 git branch -d 或者 git branch -D 删除提示分支不存在。

本地远程分支删不掉的原因,系远程分支已经被其他终端删除,本地更新后 packed-refs 已经被删除,导致 git branch -d 报找不到分支的错误,需要手动清理 .git/refs/remotes/origin/branch_name。

如下示例:

$ cat .git/packed-refs
# pack-refs with: peeled
6d12bad321cbe20e4d32782e2dd217c05cf3daed refs/remotes/origin/master
3f59a50abc9cbd4cf9590f8dc9617ef42dbf3f20 refs/remotes/origin/dev


$ git branch -av
* dev                             95109a3 ...
  fix-20161101                    fe57263 ...
  master                          2cd49d9 Merge branch 'dev'
  remotes/origin/HEAD             -> origin/master
  remotes/origin/dev              95109a3 新增定时脚本
  remotes/origin/feature-20161101 95109a3 新增定时脚本
  remotes/origin/master           2cd49d9 Merge branch 'dev'
  remotes/origin/rhett            b0bcd11 ...


$ ls .git/branches
total 8.0K
drwxrwxr-x. 2 www www 4.0K Aug 22 11:31 .
drwxrwxr-x. 8 www www 4.0K Nov  1 13:22 ..
$ ls .git/packed-refs
-rw-rw-r--. 1 www www 159 Aug 22 11:31 .git/packed-refs

$ ls .git/refs/remotes/origin/
total 28K
drwxrwxr-x. 2 www  www  4.0K Nov  1 13:23 .
drwxrwxr-x. 3 www  www  4.0K Aug 22 11:31 ..
-rw-rw-r--. 1 root root   41 Oct 31 16:50 dev
-rw-rw-r--. 1 root root   41 Nov  1 10:00 feature-20161101
-rw-rw-r--. 1 www  www    32 Aug 22 11:31 HEAD
-rw-rw-r--. 1 root root   41 Sep 26 10:07 master
-rw-rw-r--. 1 root root   41 Oct 28 13:42 rhett

$ ls .git/refs/remotes/origin/
total 28K
drwxrwxr-x. 2 www  www  4.0K Nov  1 13:23 .

上面的操作实例中,rhett 分支在 origin 下存在,但是在 .git/packed-refs 文件中并没有,所以导致这个分支删不掉并且会被显示出来,在 .git/refs/remotes/origin 下将其删除即可。造成这种原因一般是:分支在此处创建,推送到远程库后,远程库被其他终端删除,此处更新导致。

另外使用 git remote prune origin 一样可以清理不存在的远程分支。

相关文章
2019-12-14 17:47:30 1576316850 0.020263