
スポンサーリンク
Gitで間違ったコミットをしてしまった場合でも、簡単に取り消す方法がいくつかあります。
本記事では、さまざまな状況に応じたコミットの取り消し方を詳しく解説します。
1.直前のコミットを取り消す
git reset --soft
や git reset --mixed
を使うことで、コミットを取り消した後も変更を保持することができます。
git reset --soft
による取り消し
開発中に誤ってコミットしてしまった場合、git reset --soft
を使用すると簡単に取り消すことができます。
git reset --soft HEAD~1
このコマンドは、最新のコミットを削除しつつ、ファイルの変更をそのままステージングエリア(インデックス)に残します。これにより、すぐに修正して再コミットすることが可能です。
git reset --mixed
による取り消し
git reset --mixed HEAD~1
git reset --mixed
は、コミットを取り消した後、変更をワークツリーにそのまま残し、ステージングエリア(インデックス)から削除します。これにより、変更を再度編集してからコミットすることが可能です。
--soft
と --mixed
の違い・使い分け
git reset --soft
と git reset --mixed
はどちらもコミットを取り消すコマンドですが、変更の扱いが異なります。
git reset --soft HEAD~1
は、最新のコミットを取り消し、変更を ステージングエリアに保持 します。そのため、すぐに再コミットが可能です。git reset --mixed HEAD~1
は、最新のコミットを取り消し、変更を ステージングエリアから解除し、ワークツリーに残します。再コミットする前に、必要なファイルを再度git add
する必要があります。
変更をすぐにコミットし直したい場合は --soft
、変更を再編集したい場合は --mixed
を使用すると便利です。
2.特定のコミットを取り消す
過去の特定のコミットを取り消す場合は、git revert
を使用します。
git revert --no-edit <コミットID>
git revert
は指定したコミットIDを「取り消す新しいコミット」を作成するため、履歴を保持しながら変更を打ち消すことができます。これは、チーム開発において履歴を改変せずに修正を適用したい場合に便利です。
コミットIDの確認方法
特定のコミットを取り消したい場合は、そのコミットのID(ハッシュ値)を確認する必要があります。以下のコマンドを使用すると、コミット履歴とともにコミットIDを確認できます。
git log --oneline
このコマンドを実行すると、以下のような出力が表示されます。
3a5b9f2 修正: バグ修正1c2d3e4 追加: 新機能の実装9f8e7d6 初回コミット
ここで表示される 3a5b9f2
や 1c2d3e4
がコミットIDです。特定のコミットを git revert
などで取り消す際に、このIDを使用します。
git revert --no-edit 3a5b9f2
3.プッシュ済みのコミットを取り消す
リモートリポジトリにプッシュした後に誤ったコミットを取り消したい場合は、git reset --hard
と git push --force
を組み合わせて使用します。
git reset --hard HEAD~1
git push --force
git reset --hard
は、指定したコミット以降の履歴を完全に削除し、ローカルの変更もすべて破棄します。
その後、git push --force
でリモートリポジトリを上書きします。
ただし、これは他の開発者の作業に影響を与える可能性があるため、使用する際は注意が必要です。
HEAD~1の補足
各コマンドで指定しているHEAD~1
について補足します。
HEAD~1
は、現在のブランチの最新のコミット(HEAD)から 1つ前のコミット を指します。例えば、直前のコミットを取り消す場合に HEAD~1
を指定すると、現在の最新コミットが削除または変更されます。
例
HEAD~1
→ 直前のコミットHEAD~2
→ 2つ前のコミットHEAD~3
→ 3つ前のコミット
このように、HEAD~n
の n
を増やすことで、過去の特定のコミットに戻ることができます。
Git取り消し方法まとめ
Gitでは、さまざまな方法でコミットを取り消すことができます。本記事で紹介したコマンドをまとめると以下の通りになります。
用途 | コマンド | 意味 |
---|---|---|
1a.直前のコミットを取り消す | git reset --soft HEAD~1 | 直前のコミットを取り消し、変更をステージングエリアに保持する |
1b.直前のコミットを取り消す | git reset --mixed HEAD~1 | 直前のコミットを取り消し、変更をワークツリーに残す |
2.特定のコミットを取り消す | git revert <コミットID> | 指定したコミットを打ち消す新しいコミットを作成する |
3.プッシュ済みのコミットを取り消す | git reset --hard HEAD~1 git push --force | 直前のコミットを完全に取り消し、変更履歴も削除する 強制的にリモートリポジトリに変更を適用する ※他開発者への影響もあるので使用時は要注意 |
適切な方法を選んで、安全にGitの履歴を管理しましょう!
以上で本記事の解説を終わります。
よいITライフを!