如何重置整个Git存储库,而不仅仅是“主”分支,以匹配远程?
问题描述:
标题说的是什么。如何重置整个Git存储库,而不仅仅是“主”分支,以匹配远程?
我想重置每一个地方分支,以配合我的远程存储库,包括删除一些分支机构和只存在于本地的标签,而不必删除一切,从头克隆。我能找到的所有信息都是关于如何重置特定分支的说明,但不是整个存储库。
更妙的是,如果它可以从TortoiseGit外壳扩展来完成。但是我对命令行也很好。
答
您可以通过下面的命令做到这一点:
git checkout --orphan @
git fetch <Remote> refs/*:refs/* --refmap= --prune --force
其中<Remote>
是远程仓库要使用。您只需fetch
所有远程裁判(refs/*:refs/*
)与--prune
和--force
标志拆除和强制更新本地引用。
答
下面一行将所有本地分行有一个配置的上游分支上游分支的状态
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
重置由于第一个命令,因为您无法重置当前签出的分支,因此在完成此操作后签出您想要在工作目录中的分支。
这可能是一个重复的http://stackoverflow.com/questions/13064613/how-to-prune-local-tracking-branches-that-do-not-exist-on-remote-anymore – Juuuuuu
距离初始状态你想要吗?你想保留幸存分支的reflog吗?合并选项?最残忍的答案是克隆而不进行重新调整,'''git clone --reference = .git'git config remote.origin.url' ../newclone; cp -al .git/objects ../newclone/.git; rm ../ newclone/.git/objects/info/alternates''',但这并不能保存reflogs或merge/pull选项或任何东西,这是一个完全原始的克隆。 – jthill
@jthill我真的想要一个精确的远程克隆,所以你的解决方案似乎是有效的。现在我去[PetSerAl的答案](http://stackoverflow.com/a/41147559/3258851),但如果你知道你的建议将是可取的,为什么,我可能会改变我的选择答案! –