Исследовать затрагиваемые ветви и тег
Найдите первое обязательство филиала вы хотите сбросить атомную бомбу, возможно, с помощью 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
Очистка локальных и удаленных филиалов
Checkout ветвь вы хотите удалить и использовать git filter-branch
для сброса всех фиксаций на ветви к родителю ветви сначала совершить:
git checkout evilbranch
git filter-branch --force --index-filter `git reset --hard 666bad^' \
--prune-empty 666bad..HEAD
Это удалит коммиты по мере их поступления, потому что они пустые.
Force-раздвинуть результаты вашего происхождения
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 и ваш филиал имеет какие-Pull запросы на него, вы должны связаться со службой поддержки GitHub и просить, чтобы они подрезать ваш Pull запросы. Вы также должны связаться с ними, чтобы удалить кешированные представления.
Я никогда не использовал его, и это может быть не совсем уместно для вашей ситуации, но если вы просто пытаетесь избавиться от конфиденциальных данных, которые не должны были быть зафиксированы, есть [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