追跡されたリモートブランチを自分のものでオーバーライドするには、を実行しますgit push origin --force mybranch
。(または、-f
の代わりに使用する--force
か、ブランチ名の前に:を付け+
ますgit push origin +mybranch
。)
ブランチを変更した可能性のある共同作業者には、ブランチがリモートで変更されたことを警告する必要があることに注意してください。そうすれば、ブランチが上書きされなくなります。なぜならgit push
、それらのコピーでは、リモートブランチに対して早送りが行われるためです。ただし、少なくとも1つの新しいコミットを作成しgit pull
、ローカルバージョンのブランチを更新しない場合を除きます。共同編集者は次のことを行う必要があります。
git fetch origin
git checkout mybranch
git rebase origin/mybranch
完全を期すために更新:@CodeGnomeが示唆しているように、コミットを存在から完全に削除するには、コミットgit prune --expire now
を含むすべてのGitリポジトリで実行します。ただし、このコマンドはGitからすべてのぶら下がっているオブジェクトを削除し、実行する前に「失った」データの回復を妨げることに注意してください。通常は問題ありませんが、とにかく警告する必要があります。
更新:このページが示唆しているように、git prune --expire now
reflogsからコミットをクリーンアップしません。解決策については、リンクを参照してください。より侵襲性の低いソリューションについては、を試してくださいgit reflog expire --all mybranch
。を実行する前にこれを行う必要がありますgit prune
。
変更を削除する「元に戻す」コミットを明示的に生成する方が望ましい場合があります(古いバージョンとその削除の事実が履歴に表示されます)。そのためのgit revert
コマンドがあります。