おそらく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 answer(http://stackoverflow.com/a/34657278/2531279)を参照してください。 このブランチでコミットされたコミットを取り除きたい場合は、もっと複雑で、実際には 'git filter-branch'を使う必要があります。 – Frodon