はじめに
アドベントカレンダー 12/18 = 18記事目です!
Git を使ってコードを書いていると、間違えてコミットしてしまった、
あるいは「この変更はやっぱりなかったことにしたい」と思う瞬間がありました
Git では、そんなときに役立つコマンドが複数あって ― 特に git revert と git reset。
両方とも「変更を取り消す」という目的に見えますが、やっていることとリスクが違う事を知りました
この違いをきちんと理解しておかないと、あとで「コミット履歴がぐちゃぐちゃ」「チームで混乱」「データが消えた!」なんて事態になりかねません 😨
この記事では、git revert と git reset の違いを、「ざっくり」「具体的」に説明します。
✅ ざっくり違い
| コマンド | 何をするのか | 安全性 | よく使う場面 | |
|---|---|---|---|---|
| git revert | 過去の変更を打ち消す “新しいコミット” を作る | ✅ 安全 (履歴が残る) | 「共有リポジトリ/チームで使ってるとき」「過去コミットを取り消したいとき」 | |
| git reset | コミットや変更を “なかったことにする” (履歴を書き換える) | ⚠️ 危険 (履歴が消える可能性) | 「自分のローカルだけ」「まだ誰にも共有してない」「履歴整理したいとき」 |
例:3つコミットした後の操作
git commit -m "1: 初期ファイル作成"
git commit -m "2: ヘッダー追加"
git commit -m "3: フッター追加"
現在のログ ( git log --oneline ) はこんな感じ:
c3f8b13 3: フッター追加
b7a3c22 2: ヘッダー追加
a1d2f11 1: 初期ファイル作成
git revert の例(履歴を保ちつつ取り消す)
git revert b7a3c22
- 「ヘッダー追加」の変更を打ち消す新しいコミットが追加される
- ログはこうなる:
e4f9a55 Revert "2: ヘッダー追加"
c3f8b13 3: フッター追加
b7a3c22 2: ヘッダー追加
a1d2f11 1: 初期ファイル作成
- 👍 安全。履歴はそのまま。チーム開発でも安心
⚠️ git reset の例(履歴を巻き戻す/削除する)
git reset --hard b7a3c22
- 「3: フッター追加」のコミットがなかったことになる。ファイル内容もコミット時点に戻る
- ログはこうなる:
b7a3c22 2: ヘッダー追加
a1d2f11 1: 初期ファイル作成
- ❗ コミットと変更が完全に消える — ローカル専用 or 完全にやり直したいとき用。共有リポジトリには向かない。 ([Atlassian][3])
さいごに
Git を使ってコードを書いてると、間違いや「あ、やっぱり戻したい」がどうしても起きるもの。
そんなとき、git revert と git reset のどちらを使うのか
- チームで共有してる・すでに他人にも見えているコード →
git revertで “取り消しコミット” を追加して安全に戻す - 自分のローカルだけで試している・一からやり直したい →
git resetで履歴ごと巻き戻す
最近はターミナルでコマンドを入力して処理する頻度が極端に減っているからこそ、改めて確認したい事項でした。