调查受影响的分支和标签
找到的第一个承诺要核弹,分支可能使用git log --all --decorate --graph --oneline
或使用git reflog
。假设第一次提交是666bad
。
使用PyRulez提到的技巧来帮助查找可能被此分支污染的任何标签或分支。
git branch -a --contains 666bad
git tag --contains 666bad
如果有任何标签与分支关联,请在本地和远程删除它们。
git tag -d <tag name 1> <tag name 2> ... # remove tags locally
git push --delete origin <tag name 1> <tag name 2> ... # remove tags remotely
清理本地和远程分支机构
结帐要删除,并使用git filter-branch
重置所有提交的分支的父分支的分支的第一个承诺:
git checkout evilbranch
git filter-branch --force --index-filter `git reset --hard 666bad^' \
--prune-empty 666bad..HEAD
这将删除提交,因为它是空的。
结果强制推送到您的起源
git push origin --force
清理reflog
剪枝悬挂承诺
git reflog expire --expire=now --all
git gc --prune=now
清理队员分支机构
确保任何人已检出分支的计算机删除标签和其机器上的分支,然后他们到期他们的reflog和垃圾收集。
git tag -d <tag name 1> <tag name 2> ...
git branch -D evilbranch
git checkout master
git reflog expire --expire=now
git gc --prune=now
最后需要说明的
如果你的出身是GitHub上和你的分支上有任何引入请求,你必须联系GitHub的支持,并要求他们修剪你的引入请求。您还应该联系他们以删除缓存的视图。
来源
2016-01-18 20:12:58
drs
我从来没有使用它,它可能与您的情况没有任何关系,但如果您只是想摆脱不应该提交的敏感数据,那么[BFG](https) ://rtyley.github.io/bfg-repo-cleaner/)。 – DaveyDaveDave
[删除本地和远程的Git分支]可能的副本(http://stackoverflow.com/questions/2003505/delete-a-git-branch-both-locally-and-remotely) –
如果你只是想删除本地和远程分支,请参阅@codeWizard答案(http://stackoverflow.com/a/34657278/2531279)。 如果你想摆脱在这个分支上完成的提交,它会更复杂,而且确实需要使用'git filter-branch'。 – Frodon