1. リモートにプッシュしていない最新のコミットが1つあり、そのコミットを取り消したい
# 現在の変更はステージングしたまま
git reset --soft HEAD~1
# 現在の変更のステージングは外す
git reset --mixed HEAD~1
# 現在の変更は破棄する
git reset --hard HEAD~1
2. リモートにプッシュしていない最新のコミットが2つあり、そのうちの最後のコミットだけ取り消したい
最新のコミットを取り消すので、1.と同じ
# 現在の変更はステージングしたまま
git reset --soft HEAD~1
# 現在の変更のステージングは外す
git reset --mixed HEAD~1
# 現在の変更は破棄する
git reset --hard HEAD~1
3. リモートにプッシュしていない最新のコミットが2つあり、2つともコミットを取り消したい
# 現在の変更はステージングしたまま
git reset --soft HEAD~2
# 現在の変更のステージングは外す
git reset --mixed HEAD~2
# 現在の変更は破棄する
git reset --hard HEAD~2
4. リモートにプッシュ済みの最新のコミットを取り消したい
# ローカルの最新のコミットを取り消す(現在の変更は破棄する)
git reset --hard HEAD~1
# リモートにフォースプッシュ
git push -f origin
リモートの履歴を改変するので、共同作業者がいる場合は事前にコミュケーションを取るなど、注意が必要
※コミット履歴を残す場合はgit revert
最新のコミットを受け消す、新しいコミット履歴が作成される。
git revert HEAD
git push origin
5. ローカルのコミット履歴に関わらず、リモートの最新コミットの状態に戻したい
# 指定したリモートブランチの最新コミットに戻す(現在の変更は破棄する)
git reset --hard origin/ブランチ名