こんにちは、Tech Samuraiです!
Gitの基本的な操作(add
, commit
, push
, pull
)に慣れてくると、次に知りたくなってくるのが「コミット履歴」の管理方法ではないでしょうか。「あ、このコミットやっぱり修正したい」「複数のコミットを一つにまとめたい」「間違えてプッシュしちゃったコミットを取り消したい」…など、開発の現場では様々な状況が発生します。
コミット履歴は、プロジェクトがどのように進化してきたかを物語る、非常に重要な「開発日誌」です。この日誌を綺麗に、そして安全に管理するための強力なコマンド、log
, reset
, revert
, rebase
の使い方を探検しましょう。
【重要】
この記事では、歴史を「書き換える」可能性のある危険なコマンドも紹介します。チーム開発における大原則は、**「他の人と共有した履歴は、決して書き換えない」**ことです。そのための安全な使い分けについても、詳しく解説していきます。
1. 過去を旅する:`git log`
履歴管理の第一歩は、過去のコミットを確認することです。git log
は、これまでのコミット履歴を一覧表示する、最も基本的なコマンドです。
# 基本的なログ表示
git log
しかし、そのままでは情報が多すぎることがあります。以下のオプションを付けると、格段に見やすくなります。
--oneline
: 各コミットを1行で簡潔に表示します。--graph
: ブランチの分岐やマージの様子を、線で視覚的に表示します。--all
: 現在のブランチだけでなく、すべてのブランチの履歴を表示します。
おすすめの組み合わせ:
# 全てのブランチの履歴を、グラフ付きで、1行で表示する
git log --all --graph --oneline
このコマンドは、プロジェクト全体の流れを把握するのに非常に役立ちます。
2. コミットを取り消す(共有前):`git reset`
git reset`
は、**まだプッシュしていない、ローカルリポジトリだけのコミット**を取り消したいときに使います。ブランチの指し示す位置を、過去の特定のコミットに強制的に移動させる、タイムマシン(巻き戻し)のようなコマンドです。
【注意!】
このコマンドはコミット履歴を「消去」するため、**すでにチームに共有(プッシュ)したコミットに対しては絶対に使ってはいけません。**
git reset
には3つのモードがあります。
--soft
: コミットだけを取り消し、変更内容はステージングエリア(git add
した後の状態)に残します。「コミットメッセージを間違えたから、もう一度コミットし直したい」といった場合に便利です。git reset --soft HEAD~1 # 1つ前のコミットを取り消す
--mixed
(デフォルト): コミットとステージングを取り消し、変更内容はワーキングディレクトリ(ファイルが編集された状態)に残します。--hard
(危険!): コミット、ステージング、そしてファイルへの変更内容のすべてを完全に消し去ります。使う前には、本当にその変更が不要かよく確認してください。
3. コミットを打ち消す(共有後):`git revert`
では、「すでにプッシュしてしまったコミット」を安全に取り消したい場合はどうするのでしょうか? その答えがgit revert
です。
git revert`
は、履歴を消去するのではなく、**指定したコミットの変更内容を、すべて元に戻すような新しいコミットを自動で作成**します。
例えるなら… reset`
が「帳簿のページを破り捨てる」行為なら、revert`
は「『先のページの記載は誤りでした』という訂正記録を、新しいページに追記する」行為です。これにより、何が起こったかの履歴を全て残したまま、安全に変更を打ち消すことができます。
# 取り消したいコミットのIDを指定して実行
git revert <commit-id>
4. 履歴を美しく整える:`git rebase -i`
git rebase`
は非常に多機能ですが、ここでは特に便利な**インタラクティブリベース(-i
)**を紹介します。これも、まだプッシュしていないローカルのコミット**に対してのみ使う、歴史の編集ツールです。
例えば、「WIP(作業中)」のような細かすぎるコミットを、機能が完成した後に一つにまとめたい、といった場面で使います。
# 直近3つのコミットを編集対象にする
git rebase -i HEAD~3
このコマンドを実行すると、編集画面が開き、各コミットに対して以下のような指示を出せます。
pick
(p): そのまま使用するreword
(r): コミットメッセージを修正するsquash
(s): 一つ前のコミットに統合する(コミットをまとめる)drop
(d): そのコミットを削除する
不要なコミットを整理し、コミットメッセージを分かりやすく修正することで、後から誰が見ても理解しやすい、美しい開発日誌を作成できます。
まとめ
やりたいこと | 共有済み? | 使うコマンド | 履歴の扱い |
---|---|---|---|
履歴を見る | – | git log | 変更なし |
ローカルのコミットを取り消す | 共有前 | git reset | 履歴を消去(危険) |
共有済みのコミットを打ち消す | 共有後 | git revert | 打ち消しコミットを追加(安全) |
ローカルのコミットを整理する | 共有前 | git rebase -i | 履歴を書き換える(危険) |
Gitの履歴管理は、強力な分、注意が必要なコマンドも多いです。特に、「共有済みの履歴は書き換えない(reset
やrebase
をしない)」という黄金律を守ることが、チーム開発を円滑に進めるための鍵となります。
これらのコマンドを適切に使い分け、あなたのプロジェクトの物語を、より美しく、より分かりやすく記録していきましょう!
コメント