【入門編】Gitの「コミット履歴を間違えた!」を救うresetとrevertの正しい使い分け – バージョン管理・CI/CD活用バイブル

こんにちは。現場で数々の修羅場をくぐり抜け、パイプラインの深淵までを見届けてきたエンジニアです。

Gitを使い始めたばかりの頃、誰もが一度は「あ、間違えてコミットしちゃった……」と冷や汗をかいた経験があるはずです。でも、安心してください。Gitは単なる保存ツールではなく、強力な「タイムマシン」です。

今日は、初心者の方が最も迷いやすい「reset(リセット)」と「revert(リバート)」の使い分けについて、現場で一生使える鉄則を伝授します。これをマスターすれば、もうミスを恐れる必要はありません。毎日の作業が劇的に楽になり、自信を持ってコードを書けるようになりますよ。

—

1. 最初に覚えるべき「黄金の鉄則」

細かい理屈の前に、まずはこの一行だけを脳に刻んでください。

  • push前(自分だけの世界)なら:`reset`
  • push後(みんなの世界)なら:`revert`

なぜこれほどまでに使い分けが重要なのか? それは、Gitの歴史を「書き換えてしまう」のか、それとも「間違いを打ち消す記録を残す」のかという決定的な違いがあるからです。

—

2. 過去を書き換える魔法:`git reset`

`git reset` は、時計の針を直接戻すコマンドです。「さっきのコミットは無かったことにしたい」という時に使います。

resetの3つのモード

`reset` には、どの程度まで戻すかによって3つのモードがあります。

1. `–soft`(一番優しい)

  • コミットだけを取り消し、書いたコードは「ステージングエリア」に残ります。メッセージを書き直したい時に最適。

2. `–mixed`(標準)

  • コードは残りますが、ステージングが解除されます。

3. `–hard`(一番危険)

  • 書いたコードごと完全に消去します。 慎重に使ってください。

実践:間違えたコミットを取り消す

例えば、間違えて `Secret.txt` を含めてコミットしてしまった場合の手順です。

1. 状態を確認(現在の位置を把握)
git log –oneline -n 5

2. 直前のコミットを取り消し、ファイルは手元に残す (–soft)
HEAD~1 は「今の場所から1つ前」という意味です
git reset –soft HEAD~1

3. 間違えたファイルを除外して、再度コミットし直す
git rm –cached Secret.txt
git commit -m “修正:不要なファイルを除去して再コミット”

—

3. 歴史に誠実であるために:`git revert`

共有リポジトリ(GitHubなど)に `push` してしまった後、ミスに気づいた場合は `reset` を使ってはいけません。他の人の作業履歴と衝突し、チーム全体に大混乱を招くからです(これを「歴史の改ざん」と呼びます)。

そこで登場するのが `git revert` です。これは「以前のコミットを打ち消すための、新しいコミットを作る」コマンドです。

実践:push済みのバグを修正する

バグを含んだコミット `abc1234` を push してしまった時の流れです。

1. 打ち消したいコミットのハッシュ値を確認
git log –oneline

2. そのコミットを打ち消す「逆の変更」を生成
git revert abc1234

3. 自動的にエディタが開くので、メッセージを確認して保存
[Revert “バグ混入コミット”] という履歴が新しく作られます

4. チームのみんなに共有
git push origin main

これで、歴史を壊すことなく安全にミスを修正できました。

—

4. 現場で震えないための「Hello World」練習法

理論がわかったところで、安全な環境で一度「ミスと修復」を体験しておきましょう。これが一番の近道です。

ステップ1:準備

適当なディレクトリでリポジトリを作り、最初のコミットをします。

mkdir git-practice
cd git-practice
git init

echo “Initial Content” > file.txt
git add file.txt
git commit -m “First commit”

ステップ2:ミスを再現(reset編)

わざと間違ったコミットをしてみます。

echo “Oops, mistake!” > mistake.txt
git add mistake.txt
git commit -m “Bad commit”

「あ!push前だ、消さなきゃ!」
git reset –hard HEAD~1
ls コマンドで mistake.txt が消えている(歴史から抹消された)ことを確認
ls

ステップ3:ミスを再現(revert編)

今度は「もうみんなに共有しちゃった」と仮定します。

echo “Buggy code” >> file.txt
git add file.txt
git commit -m “Add feature with bug”

「あ!pushしちゃった(想定)。安全に打ち消そう」
git revert HEAD –no-edit

git log を見てください。
「Add feature with bug」の後に「Revert…」という履歴が重なっているはずです。
git log –oneline

—

5. スペシャリストからのアドバイス:`reflog` という究極の保険

もし `git reset –hard` を実行して「必要なコードまで消してしまった!」と絶望した時は、このコマンドを思い出してください。

git reflog

これは Git が行ったすべての動き(ヘッドの移動)を記録している日報のようなものです。ここには `reset` で消したはずのコミットの残像が残っています。そこから `git reset –hard [ハッシュ値]` で、消してしまった過去すらも取り戻すことができます。

—

まとめ

  • 自分の手元だけなら `reset` で綺麗に整理する。
  • 誰かと共有した後なら `revert` で誠実に履歴を残す。

この使い分けができるだけで、あなたはチーム開発における「信頼できるエンジニア」への第一歩を踏み出したことになります。

Gitはあなたの敵ではなく、最高の味方です。失敗を恐れず、どんどんコマンドを叩いてみてください。もし迷ったら、いつでもこの記事に戻ってきてくださいね。

応援しています!

タイトルとURLをコピーしました