こんにちは。現場で数々の修羅場をくぐり抜け、パイプラインの深淵までを見届けてきたエンジニアです。
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はあなたの敵ではなく、最高の味方です。失敗を恐れず、どんどんコマンドを叩いてみてください。もし迷ったら、いつでもこの記事に戻ってきてくださいね。
応援しています!