← ブログ一覧

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とは?

git rebase --show-current-patchは、rebase処理が中断している時に、現在適用しようとしているパッチの内容を表示するコマンドです。

rebaseは複数のコミットを1つずつ適用していく処理ですが、途中でコンフリクトが発生すると作業が止まります。この時、「今どのコミットを適用しようとしているのか」を確認するために使います。

表示される内容は以下の通りです

  • コミットメッセージ
  • 作者(Author)
  • 日付
  • パッチの内容(変更されたファイルと行)

どんな時に使うのか

このコマンドを使う典型的な場面は以下の3つです

  1. rebase中にコンフリクトが発生した時

    • どのファイルのどの変更でコンフリクトしているか確認する
  2. rebaseの進行状況を把握したい時

    • 全体のうち今どこまで進んでいるか知る
  3. コンフリクト解決の判断材料が欲しい時

    • 元のコミットの意図を理解してから修正する

特に初心者の場合、コンフリクトが起きると「何をすればいいかわからない」状態になりがちです。このコマンドで現状を把握してから対処すると、作業がスムーズになります。

実際の使い方

基本的な使い方

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つです

  1. Subject(コミットメッセージ)

    • このコミットが何をしようとしているか
  2. 変更されたファイル名

    • どのファイルが対象か
  3. 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 addgit rebase --continueが必要です。

git diffとの違いは?

git diffは現在の作業ツリーの変更を見るコマンドです。--show-current-patchは、rebaseで適用しようとしている「元のコミット」の内容を見るコマンドです。

コンフリクトしているファイルだけ見たい場合は?

git statusを使うと、コンフリクトしているファイルのリストが表示されます。その後、個別のファイルをgit diff ファイル名で確認できます。

関連

mayogames.hatenablog.com

mayogames.hatenablog.com