kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu Git その328 - 空のコミットオブジェクトもコミット対象にして、ブランチをリベースする(git rebase)

空のコミットオブジェクトもコミット対象にして、ブランチをリベースする

  空の「コミットオブジェクト」もコミット対象にして、ブランチをリベースします。

  空のコミットオブジェクトとは

    リベース実行時、変更内容(差分)がない「コミットオブジェクト」は、空のコミットオブジェクトとなります。

    この空のコミットオブジェクトは、リベース先でコミットが行われず、処理がスキップされます。

  空のコミットオブジェクトの例

    空のコミットオブジェクトの例です。

    例えば、以下の構成のリポジトリーがあるとします。
    「Commit2A」と「Commit2B」の変更内容は同じです。


    「fix」ブランチを「master」ブランチにリベースすると、「Commit2B」は「Commit2A」と変更内容が同一であるため、「Commit2B」は空のコミットオブジェクトになります。
    言い換えれば、差分がないということです。
    リベースでは、このような空のコミットオブジェクトはスキップされます。

    従って、リベース結果は以下のようになります。


  「Commit4」の変更内容を元に「Commit4’」を生成してリベースが完了しています。
 

  空のコミットオブジェクトをスキップせずリベースすることも可能

    リベースでは、空のコミットオブジェクトをスキップせずリベースすることも可能です。

コマンドの実行例

  コマンドの実行例です。

  1.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    現在のブランチは、「fix」ブランチであることが分かります。
    同様に、「HEAD」は「fix」ブランチを指していることが分かります。


    ここでは例として、「fix」ブランチを「master」ブランチにリベースし、「mastsr」ブランチに「fix」ブランチの変更内容を結合します。

  2.ブランチの構成

    現在のブランチの構成を図にすると、以下のようになっています。


    「Commit2A」と「Commit2B」の変更内容は同じです。

    「fix」ブランチを「master」ブランチにリベースするため、リベース対象の「コミットオブジェクト」は、以下のようになります。

  • Commit2B
  • Commit4

  3.コマンドの実行

    コマンドのオプションは、以下のオプションを指定します。

オプション
--keep-empty

    「端末」から、以下のコマンドを実行します。
    コマンドの詳細は、「ファイルの変更内容を異なるブランチに結合するコマンドの説明」を参考にしてください。

    ポイントは、赤字の箇所です。

git rebase --keep-empty master


  4.空のコミットオブジェクトの検出

    空のコミットオブジェクトが検出されると、以下のように空のコミットオブジェクトの情報が表示されます。


    ここで一時的にリベースが中断されます。
    空のコミットオブジェクトの識別子には、「b355879」と表示されています。
    この識別子は、「Commit2B」の識別子です。

    リベース先に空のコミットオブジェクトを生成する場合、「5.」以降を参考にしてください。
    リベース先に空のコミットオブジェクトを生成しない場合、「8.」以降を参考にしてください。

  5.リベース先に空のコミットオブジェクトを生成する場合

    リベース先に空のコミットオブジェクトを生成する場合、以下のコマンドを実行します。

git commit --allow-empty


    空のコミットオブジェクトは、「Commit2B」をベースに生成されます。

  6.コミットメッセージの入力

     以下のようにテキストエディターが起動するので、「コミットメッセージ」を入力します。


    「#」で始まる行はコメント行なので、コミットメッセージには反映されません。

    「コミットメッセージ」を入力したら、ファイルを上書き保存してテキストエディターを終了します。

  7.コミット完了

    以下のように、リベース先に空のコミットオブジェクトが生成されます。


    「9.」ヘ飛びます。

  8.空のコミットオブジェクトを生成しない場合

    リベース先に空のコミットオブジェクトを生成しない場合、以下のコマンドを実行します。

git reset

   

  9.リベースの続行

    以下のコマンドを実行し、リベースを続行します。

git cherry-pick --continue


  10.リベース続行

    残りのリベース対象に対してリベースが続行されます。


  11.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    「HEAD」が「分離したHEAD」になっています。


    この「HEAD」は、リベース後の「コミットオブジェクト」を指しています。

  12.ブランチの構成

    現在のブランチの構成を図にすると、以下のようになっています。


    空のコミットオブジェクトを生成したため、「Commit2B」の変更内容を元に、「Commit2B’」が新規に生成されています。
    同様に「Commit4」の変更内容を元に、「Commit4’」が新規に生成されています。

    以上でリベースは完了です。

masterブランチのブランチヘッドをHEADに合わせるには

  現在の「HEAD」は「分離したHEAD」であるため、このまま利用するには都合が悪いです。
  ここでは例として、「master」ブランチの「ブランチヘッド」が指す「コミットオブジェクト」を、「HEAD」が指す「コミットオブジェクト」を指すように変更します。

  1.ブランチヘッドの移動

    以下のコマンドを実行し、「master」ブランチの「ブランチヘッド」を「HEAD」が指す「コミットオブジェクト」を指すように変更します。    

git branch --force master HEAD


  2.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    「HEAD」は「分離したHEAD」になっています。
    「master」ブランチの「ブランチヘッド」は、「HEAD」が指す「コミットオブジェクト」を指しています。


  3.ブランチの構成

    現在のブランチの構成を図にすると、以下のようになっています。


  4.masterブランチのチェックアウト

    以下のコマンドを実行し、「master」ブランチをチェックアウトします。

git checkout master


  5.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    現在のブランチは、「master」ブランチであることが分かります。
    同様に、「HEAD」は「master」ブランチを指していることが分かります。


  6.ブランチの構成

    現在のブランチの構成を図にすると、以下のようになっています。



Git
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 22.04 その95 - ディスプレイサーバーを切り替えるには・XorgとWayland
    ディスプレイサーバーを切り替えるには 「Ubuntu」はデフォルトで2種類のディスプレイサーバーを提供しています。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • Ubuntu 24.04 その70 - Ubuntu 24.04.4 LTS のリリーススケジュール
    Ubuntu 24.04.4 LTS のリリーススケジュール Ubuntu 24.04.4 LTS のリリーススケジュールを紹介します。
  • Ubuntu 26.04 その9 - Ubuntu Desktop 26.04 LTS の開発方針・プリインストールアプリの変更やソフトウェア管理の一元化など
    Ubuntu Desktop 26.04 LTS の開発方針 2025年11月26日、Ubuntu Desktop 26.04 LTS の開発方針がアナウンスされました。
  • Ubuntu 22.04 その98 - 入力ソースとキーボートレイアウトと日本語入力のカスタマイズ
    入力ソースとキーボートレイアウトと日本語入力 「Ubuntu」ではユーザーが利用しているキーボードレイアウトや日本語入力のカスタマイズが可能です。
  • Ubuntu nano その5 - 文字列を検索する
    文字列を検索する(Where Is)   文字列の検索は、部分一致と正規表現による検索が可能です。 検索の開始始点   現在カーソルのある位置から検索を行います。   もし、テキストの最後まで検索して文字が見つからない場合、   nanoはテキストの先頭から検索...
  • VirtualBox その125 - ゲストOSのUbuntuにLinux Guest Additionsをインストールするには
    ゲストOSのUbuntuにLinux Guest Additionsをインストールするには 仮想マシンにインストールしたゲストOSの「Ubuntu」に、「Linux Guest Additions」をインストールする方法です。
  • Ubuntu 22.04 LTSのインストール その5 - UEFI環境でパーティションの作成と構成 〜 ブートローダーのインストール先の選択
    UEFI環境でパーティションの作成と構成を行う UEFI環境でパーティションの作成と構成を行います。
  • Ubuntu 22.04 その99 - 日本語入力(Mozc)の設定をカスタマイズして作業効率を上げよう
    日本語入力(Mozc)の設定をカスタマイズするには 「Ubuntu」では日本語入力に「Mozc」を採用しています。
記事のピックアップ
オプション