技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Gitの reset、revert、rebaseの違いまとめ

git reset

過去の状態に戻る(履歴を変更する)

用途

現在のブランチの履歴を「やり直し」たいときに使用。

動作

指定したコミットまで履歴を削除したり、ステージングエリアやワークツリーを変更。

種類

--soft: 履歴だけ戻す(ファイルの内容やステージングはそのまま)。
--mixed: 履歴を戻し、ステージングエリアもリセット(デフォルト動作)。
--hard: 履歴、ステージング、作業ディレクトリすべて戻す(変更が完全に消える)。

# HEADを1つ前のコミットに戻す(ファイル内容はそのまま)
git reset --soft HEAD~1

ポイント

履歴を修正する際に使うため、チームで共有された履歴には使わない方が良い。

https://www.r-staffing.co.jp/engineer/entry/20191129_1

git revert

用途

過去のコミットを「打ち消す」新しいコミットを作成します。主に「チームで共有しているリポジトリの変更を元に戻したい」ときに使います。

動作

指定したコミットを取り消す新しいコミットを作成します。
履歴を改変しないため、共有リポジトリでも安全に使用できます。

git rebase

用途. 履歴を編集・整理 するために使います。コミットの順序を変更したり、複数のコミットをまとめたりすることで、履歴を「きれい」にできます。 主に 個人作業やプライベートブランチ で使われることが多いです。

動作

インタラクティブリベース(-i オプション) を使うことで、コミットの削除・編集・結合が可能。 ブランチの基底を別のブランチに移動できる(例: 古いブランチを最新のブランチに追随させる)。

比較

機能 git reset git revert git rebase
主な用途 履歴を「やり直す」 過去のコミットを「取り消す」 履歴を編集・整理
履歴の改変 改変する 改変しない 改変する
使用場面 個人作業、間違ったコミットの修正 共有リポジトリでの安全な取り消し 履歴を整理して見やすくする、ブランチを最新化
動作の概要 指定したコミットに戻り、履歴や状態をリセット 指定したコミットを打ち消す新しいコミットを作成 コミットの順序変更、結合、削除、基底ブランチ変更
適用範囲 履歴、ステージングエリア、ワークツリー 特定のコミット 指定の範囲の履歴全体
安全性 チーム共有では使用非推奨(履歴が壊れる可能性あり) 安全(履歴を残すため問題なし) 共有リポジトリでは非推奨(履歴が改変されるため)
注意点 誤った --hard は作業内容が完全に失われるリスクあり コミットを「完全削除」ではなく「打ち消し」なので注意 操作ミスで履歴が壊れるリスクがある
主なオプション --soft, --mixed, --hard なし -iインタラクティブモード)
使用例 git reset --hard HEAD~1 git revert <コミットID> git rebase -i <基底ブランチ>

選び方のポイント

git reset

  • 個人作業で「履歴をやり直したい」ときに適している。
  • 履歴やファイル状態を戻したいが、共有ブランチでは非推奨

git revert

  • チーム開発で、履歴を保持しながら特定の変更を取り消したい場合に使用。
  • 共有リポジトリで安全

git rebase

  • 開発中のブランチを整理したり、最新ブランチに追随させたいときに便利。
  • ただし、共有ブランチには使用しない