使用 `prune` 清理 Git 仓库的远程分支

kaichikaichi • 2022-06-13

2 分钟0 阅读

Git 的好处之一就是其在删除数据方面尤为谨慎,因此我们很难丢失提交记录或者其它有用的数据。但是这样的好处有时也会带来一些小麻烦,有时我们可能会看到实际上不再需要的旧数据。

问题

最好的例子之一是已经删除的远程分支引用,可能某些分支在某种情况下在远程仓库中被删除,除非你明确指示 Git 进行清理,否则该分支仍然对你可见。当在这种情况下 fetch 分支信息会出现下面的报错。

$ error: cannot lock ref 'refs/remotes/origin/dev': 'refs/remotes/origin/dev' exists; cannot create 'refs/remotes/origin/dev'

因为 dev 分支在远程已被删除,所以我们可以在本地创建 dev 分支进行修改并提交的远程。但当我们 fetch 时,两个相同的引用出现了冲突,产生了上述的错误。

解决

方法一

那么怎么解决这个问题呢?最简单的方法是使用 fetch--prune 参数。

$ git fetch --prune origin

方法二

或者如果不想获取远程数据,可以使用 remote 指令。

$ git remote prune origin

两种方法的结果是一样的,都将删除远程仓库上不再存在的远程分支的旧引用。

方法三

另一个一劳永逸的方法是 Git 全局配置,使其每次 fetch 时执行 prune

$ git config --global fetch.prune true
在 Github 上编辑