git rebase --show-current-patch とは?
git rebase --show-current-patchは、rebase(リベース:コミット履歴を整理する操作)の途中で止まった時に、今どのパッチ(変更内容)を適用しようとしているのかを表示するコマンドです。rebase中にコンフリクト(競合)が発生して作業が止まった場合、このコマンドで現在の状況を確認できます。
この記事のまとめ
git rebase --show-current-patchは、rebase中に現在適用中のパッチ内容を確認するためのコマンドです。コンフリクトが発生した際のトラブルシューティングに役立ちます。
- rebase中に何が起きているかを確認できる
- コンフリクトの原因となっている変更内容を見られる
--show-current-patch=diffで詳細な差分表示も可能
この記事の情報源
この記事は、以下の情報源に基づいています。重要な判断をする際は、必ずこれらを直接ご確認ください。
- この記事のまとめ
- この記事の情報源
- git rebase —show-current-patchとは?
- どんな時に使うのか
- 実際の使い方
- 表示内容の見方
- 関連するオプション
- rebase中の他の確認コマンド
- まとめ
- よくある質問
- 関連
git rebase --show-current-patchとは?
git rebase --show-current-patchは、rebase処理が中断している時に、現在適用しようとしているパッチの内容を表示するコマンドです。
rebaseは複数のコミットを1つずつ適用していく処理ですが、途中でコンフリクトが発生すると作業が止まります。この時、「今どのコミットを適用しようとしているのか」を確認するために使います。
表示される内容は以下の通りです
- コミットメッセージ
- 作者(Author)
- 日付
- パッチの内容(変更されたファイルと行)
どんな時に使うのか
このコマンドを使う典型的な場面は以下の3つです
-
rebase中にコンフリクトが発生した時
- どのファイルのどの変更でコンフリクトしているか確認する
-
rebaseの進行状況を把握したい時
- 全体のうち今どこまで進んでいるか知る
-
コンフリクト解決の判断材料が欲しい時
- 元のコミットの意図を理解してから修正する
特に初心者の場合、コンフリクトが起きると「何をすればいいかわからない」状態になりがちです。このコマンドで現状を把握してから対処すると、作業がスムーズになります。
実際の使い方
基本的な使い方
rebase中に以下のコマンドを実行します。
git rebase --show-current-patch
これだけで、現在のパッチ内容が表示されます。
より詳細な差分を見る方法
パッチの詳細な差分(どの行がどう変更されたか)を見たい場合は、以下のようにします。
git rebase --show-current-patch=diff
このオプションを付けると、git diff形式で変更内容が表示されます。
実行できるタイミング
このコマンドは、rebaseが中断している時のみ有効です。rebase中でない場合は、以下のようなエラーが出ます。
fatal: No rebase in progress?
表示内容の見方
git rebase --show-current-patchを実行すると、以下のような内容が表示されます。
From [コミットハッシュ] Mon Sep 17 00:00:00 2001
From: author@example.com
Date: Mon, 1 Jan 2024 12:00:00 +0900
Subject: [PATCH] コミットメッセージ
---
変更されたファイル名 | 行数の変化
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/file.txt b/file.txt
...
見るべきポイントは以下の3つです
-
Subject(コミットメッセージ)
- このコミットが何をしようとしているか
-
変更されたファイル名
- どのファイルが対象か
-
diff部分
- 具体的にどの行が変更されているか
この情報をもとに、コンフリクトの原因を特定します。
関連するオプション
git rebase --show-current-patchには、いくつかのバリエーションがあります。
--show-current-patch=raw
パッチをそのままの形式(メールパッチ形式)で表示します。デフォルトの動作です。
git rebase --show-current-patch=raw
--show-current-patch=diff
git diff形式で差分を表示します。変更内容を詳しく見たい時に使います。
git rebase --show-current-patch=diff
この形式の方が、行ごとの変更が見やすいです。
rebase中の他の確認コマンド
git rebase --show-current-patch以外にも、rebase中に使える確認コマンドがあります。
git status
現在の状態を確認できます。rebase中であることと、コンフリクトしているファイルが表示されます。
git status
git log --oneline
これから適用される残りのコミットを確認できます(--ontoオプション使用時)。
.git/rebase-applyまたは.git/rebase-mergeディレクトリ
rebase中は、この隠しディレクトリにrebaseの状態が保存されています。ここを見ると、何番目のパッチまで進んでいるかがわかります(上級者向け)。
まとめ
git rebase --show-current-patchは、rebase中のトラブルシューティングに役立つコマンドです。
- rebase中に現在適用しようとしているパッチ内容を表示する
- コンフリクトの原因を特定するために使う
--show-current-patch=diffで詳細な差分も見られるgit statusと併用すると、より状況を把握しやすい
rebaseでつまずいた時は、まずこのコマンドで現状を確認してから対処すると、スムーズに作業できます。
よくある質問
rebase中じゃない時に使ったらどうなる?
fatal: No rebase in progress?というエラーが表示されます。このコマンドは、rebaseが中断している時のみ有効です。
パッチって何?
パッチとは、1つのコミットの変更内容を指します。「どのファイルのどの行をどう変更したか」という情報のまとまりです。
このコマンドだけでコンフリクトは解決できる?
いいえ、解決はできません。このコマンドは「確認」専用です。コンフリクトを解決するには、ファイルを編集してgit add→git rebase --continueが必要です。
git diffとの違いは?
git diffは現在の作業ツリーの変更を見るコマンドです。--show-current-patchは、rebaseで適用しようとしている「元のコミット」の内容を見るコマンドです。
コンフリクトしているファイルだけ見たい場合は?
git statusを使うと、コンフリクトしているファイルのリストが表示されます。その後、個別のファイルをgit diff ファイル名で確認できます。