ResetとRevertの違いとは?初心者向けに役割・使い方・実務での使い分けをわかりやすく解説
結論として、Reset(リセット)はコミット履歴を戻して履歴そのものを書き換える操作、Revert(リバート)は履歴を残したまま変更を取り消すための新しいコミットを作成する操作です。
どちらも「変更を元に戻す」ための機能ですが、履歴の扱い方が大きく異なります。
IT現場では、共有済みのリポジトリではRevertを利用し、まだ共有していないローカル作業ではResetを利用することが一般的です。
この記事では、IT業務に従事する初心者向けに、ResetとRevertの違い、実際の利用シーン、基本操作、よくあるトラブルまでわかりやすく解説します。
Resetとは
Reset(リセット)とは、指定したコミットまで履歴を戻すGitコマンドです。
Resetを実行すると、コミット履歴を書き換えるため、扱いには十分な注意が必要です。
Resetでできること
- 直前のコミットを取り消す
- コミット履歴を戻す
- ステージングを解除する
- ローカル作業を整理する
Revertとは
Revert(リバート)とは、取り消したいコミットとは逆の変更を行う新しいコミットを作成するGitコマンドです。
元のコミット履歴は残るため、誰が・いつ・何を取り消したかを後から確認できます。
Revertでできること
- コミットを安全に取り消す
- 履歴を残したまま修正する
- 共同開発でも安全に利用する
- 監査や障害調査に役立つ
ResetとRevertの違い
| 項目 | Reset | Revert |
|---|---|---|
| 履歴の書き換え | する | しない |
| 新しいコミット | 作成しない | 作成する |
| 共有済みブランチ | 非推奨 | 推奨 |
| ローカル作業 | 向いている | 利用できる |
| 初心者向け | △ | ◎ |
イメージすると理解しやすい
Reset
Resetはノートの最後のページを破ってなかったことにするイメージです。
履歴自体がなくなるため、他の人と共有している場合は混乱の原因になります。
Revert
Revertは「前の内容は間違いでした」と訂正を書くイメージです。
履歴は残るため、後から経緯を確認できます。
Gitの基本的な流れ
Resetを利用する場合
- コミットする
- 誤りに気付く
- Resetする
- 修正して再度コミットする
Revertを利用する場合
- Push済みコミットを確認する
- Revertする
- 取り消し用コミットを作成する
- Pushして共有する
Resetの種類
| 種類 | 特徴 |
|---|---|
| –soft | コミットだけ取り消し、変更内容は保持する |
| –mixed | コミットとステージングを取り消す(既定) |
| –hard | コミット・ステージング・作業内容をすべて削除する |
特に--hardは変更内容が失われる可能性があるため、十分注意して使用しましょう。
実際のIT現場での利用例
例1:システム開発
ローカルで誤ったコミットをした場合はResetでやり直します。
すでにPushしたコミットを取り消す場合はRevertを利用することが一般的です。
例2:社内SE
PowerShellスクリプトの誤修正を本番環境へ反映してしまった場合は、Revertで変更を取り消し、履歴を残します。
例3:インフラ運用
サーバー設定ファイルを誤って変更した場合も、障害調査のためにRevertを利用する企業が多くあります。
GUIでの操作方法
- 対象コミットを選択する
- ResetまたはRevertを選択する
- 確認画面で内容を確認する
- 操作を実行する
Visual Studio CodeやSourceTreeなどのGUIツールでも実行できます。
CUI(コマンド)での操作方法
| コマンド | 内容 |
|---|---|
| git reset –soft HEAD~1 | 直前のコミットだけ取り消す |
| git reset –mixed HEAD~1 | コミットとステージングを取り消す |
| git reset –hard HEAD~1 | すべて元に戻す |
| git revert コミットID | 取り消し用コミットを作成する |
| git log | 履歴を確認する |
確認方法
履歴を確認する
- git log
Resetでは履歴が短くなり、Revertでは「Revert〜」という新しいコミットが追加されます。
現在の状態を確認する
- git status
変更内容やステージングの状態を確認できます。
確認結果の見方
| 状態 | 意味 |
|---|---|
| 履歴が減っている | Resetされた可能性が高い |
| Revertコミットが追加されている | 変更が安全に取り消された |
| Working tree clean | 変更はない |
業務でよくあるトラブル
Resetしたら変更が消えた
原因
- git reset –hardを実行した
- バックアップがない
対応方法
すぐに作業を中断し、必要に応じてgit reflogで履歴を確認します。ただし、必ず復旧できるとは限りません。
Push済みコミットをResetした
原因
共有済みブランチで履歴を書き換えたことが原因です。
チームメンバーへ影響するため、すぐに上司やリーダーへ報告しましょう。
原因の切り分け
| 確認対象 | 確認内容 |
|---|---|
| コミット | Push済みかローカルのみか |
| ブランチ | 共有ブランチか個人ブランチか |
| 履歴 | ResetかRevertか |
| 影響範囲 | 他のメンバーへ影響するか |
影響範囲
Resetは履歴を書き換えるため、共有済みブランチで実行すると他のメンバーの作業へ影響を与える可能性があります。
Revertは履歴を保持したまま変更を取り消すため、共同開発でも安全に利用できます。
初心者がやりがちなミス
- Push済みコミットをResetする
- –hardを軽い気持ちで実行する
- ResetとRevertを混同する
- 履歴を確認せず操作する
- バックアップを取らずにResetする
ショートカットキー
| キー | 内容 |
|---|---|
| Ctrl + Shift + G | Visual Studio Codeのソース管理を開く |
| Ctrl + Shift + P | コマンドパレットを開く |
| Ctrl + ` | 統合ターミナルを開く |
上司へ報告するポイント
- 対象リポジトリ名
- 対象ブランチ名
- ResetまたはRevertを実行したコミット
- Push済みかどうか
- 影響を受けるメンバー
エスカレーションするタイミング
- Push済みコミットをResetした
- git reset –hardを誤って実行した
- 履歴を復元できない
- 重要なファイルが消えた
- どちらを使うべきかわからない
新人が覚えておくべきポイント
- Resetは履歴を書き換える
- Revertは履歴を残す
- 共有済みブランチではRevertを優先する
- Reset –hardは慎重に扱う
- 操作前にPush済みか確認する
ResetとRevertはどちらを使うべき?
| 利用シーン | おすすめ |
|---|---|
| ローカルの誤コミットを修正したい | Reset |
| Push済みコミットを取り消したい | Revert |
| 共同開発 | Revert |
| 履歴を残したい | Revert |
| まだ誰にも共有していない作業 | Reset |
関連するIT用語
- Git
- GitHub
- GitLab
- Commit
- Push
- Pull
- Branch
- Merge
- Rebase
- Reflog
よくある質問(FAQ)
Resetするとコミットは完全に消えますか?
履歴上は見えなくなりますが、すぐであればgit reflogを利用して復旧できる場合があります。ただし、復旧できる保証はないため、安易にResetを実行しないようにしましょう。
Pushしたコミットを取り消すにはResetとRevertのどちらを使うべきですか?
基本的にはRevertを使用します。履歴を書き換えないため、他のメンバーへの影響を最小限に抑えられます。
ResetとRestoreは同じですか?
いいえ。Resetはコミットやステージングの状態を変更するコマンドで、Restoreはファイルを以前の状態へ戻すことを目的としたコマンドです。
初心者はResetを使わない方がよいですか?
ローカルでの作業整理には便利ですが、共有済みブランチでは慎重に扱う必要があります。迷った場合は、履歴を残せるRevertを選ぶ方が安全です。
まとめ
ResetとRevertはどちらも変更を取り消すための機能ですが、履歴の扱い方が大きく異なります。
- Resetは履歴を書き換えて元に戻す
- Revertは履歴を残したまま取り消しコミットを作成する
- 共有済みブランチではRevertが基本
- Resetはローカル作業で利用することが多い
- 特に
git reset --hardは変更内容が失われる可能性があるため慎重に扱う
まずは「Reset=履歴を書き換える」「Revert=履歴を残して取り消す」という違いを理解し、状況に応じて使い分けることで、安全にGitを運用できるようになります。
