如何重置整个 Git 存储库,而不仅仅是 "Master" 分支,以匹配 Remote?

How to reset the entire Git repository, and not only the "Master" branch, to match Remote?

标题如是说。

我想重置每个本地分支以匹配我的远程存储库,包括删除一些仅存在于本地的分支和标签,而不必删除所有内容并从头开始克隆。我所能找到的只是关于如何重置特定分支的说明,而不是整个存储库。

如果可以从 TortoiseGit Shell 扩展中完成就更好了。但我也可以使用命令行。

下面这行会将配置了上游分支的所有本地分支重置为上游分支的状态

git checkout @{0} && git for-each-ref refs/heads --format '%(refname:strip=2)' | xargs -ri sh -c 'git rev-parse {}@{u} >/dev/null 2>&1 && git branch -f {} $(git rev-parse {}@{u})'

由于第一个命令,你最终会得到一个分离的 HEAD,因为你无法重置当前签出的分支,所以在执行此操作后签出你想要在工作目录中拥有的分支。

您可以通过以下命令来完成:

git checkout --orphan @
git fetch <Remote> refs/*:refs/* --refmap= --prune --force

其中 <Remote> 是您要使用的远程存储库。您只需 fetch 所有带有 --prune--force 标志的远程引用 (refs/*:refs/*) 即可删除并强制更新本地引用。