如何在本地和远程删除分支及其所有历史记录?

drs*_*drs 13 git git-filter-branch

我有一个git分支,我需要克服所有的痕迹.我想我需要类似的东西

git filter-branch --index-filter 'git -D <branch>' --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

或者可能

git filter-branch --index-filter 'git rm --cached *' --tag-name-filter cat -- <branch>
Run Code Online (Sandbox Code Playgroud)

然后我会

git push -f origin :<branch>
Run Code Online (Sandbox Code Playgroud)

我不愿意在不知道他们会做什么或他们是否会工作的情况下尝试这些.

PyR*_*lez 10

假设你想要核武器evilbranch.

您说您要删除所有分支的历史记录.这在技术上包括初始提交,这可能是您想要的更多提交.首先,确定您认为哪个提交是该分支的第一次提交.让我们说吧666bad.现在我们需要找到它的所有引用.跑

git branch -a --contains 666bad
git tag --contains 666bad
Run Code Online (Sandbox Code Playgroud)

现在全部删除它们.你可以使用git命令,也可以直接进入.git/refs.

在每台可能包含该文件的计算机上执行此操作.

确保你没有分离头.

现在我们可以杀死所有提交,因此所有代码都不再可引用(来自这个 gitHub链接):

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)

同样,这应该在每台计算机上完成.

最后,在每台计算机上使用.

注意:666bad是从它来自哪里分割 evilbranch的第一次提交,即仅第一次提交evilbranch.