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

Ubuntu Git その355 - マージコミットを削除せずマージコミットを再生成し、リベースを行う(git rebase)

マージコミットを削除せずマージコミットを再生成し、リベースを行う

  「マージコミット」を削除せず、マージコミットを再生成し、「リベース」を行います。

    デフォルトでは、リベース元の「マージコミット」は削除され、「コミットオブジェクト」の繋がり(履歴)が一直線になるようにリベースが行われます。

  リベースでは、リベース元にブランチの分岐及び「マージコミット」が存在する場合、その構成を維持しつつリベースを行うこともできます。

  マージコンフリクトに注意

    リベース元の「マージコミット」で「マージコンフリクト」が発生し、ユーザーが「マージコンフリクト」の解決を行っていた場合、ユーザーがその「マージコミット」で行った変更内容は、リベース先で再現されません。

    従って、リベース先で「マージコミット」を行う際、同様に「マージコンフリクト」が発生します。
    「マージコンフリクト」が発生すると、リベースが中断されます。

    リベースを続行する場合、ユーザーは自分で再度「マージコンフリクト」の解消を行い、自分でコミットを行う必要があります。

    その後リベースを続行します。

コマンドの実行例

  コマンドの実行例です。

  1.ブランチの確認

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


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

  2.ブランチの構成

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


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

  • Commit4
  • Commit5
  • Commit6
  • Commit7
  • Commit8
  • Commit9
  • Commit10
  • Commit11

  3.コマンドの実行

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

ショートオプション ロングオプション
-p --preserve-merges

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

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

git rebase --verbose --preserve-merges master


  4.コマンドの実行結果

    以下のように、リベース結果が表示されます。

ubuntu@ubuntu-vb-1504:~/git/myCloneProject$ git rebase --verbose --preserve-merges master
Changes from 2537d065f4f34d5c75093e1091a0ddcd4681c5fe to acb648c5ac895850a1b0c7735f6f7c66eb8d199f:
 master.txt | 2 ++
 1 file changed, 2 insertions(+)
Note: checking out 'acb648c5ac895850a1b0c7735f6f7c66eb8d199f'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at acb648c... master
Rebasing (1/8)
b3558792781286ca90af046c9318dd9072fe9014
[detached HEAD db323c4] fix
 Date: Tue Aug 18 22:47:01 2015 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 fix.txt
Rebasing (2/8)
2ce00c397fab7fda134ac653ce9f34c0b9ee005f
[detached HEAD 844ee73] fix
 Date: Tue Aug 18 22:47:12 2015 +0900
 1 file changed, 1 insertion(+)
Rebasing (3/8)
598b799b338572cf37573da527346a56801d4abd
[detached HEAD 1aae9e8] fix
 Date: Sat Aug 22 16:58:18 2015 +0900
 1 file changed, 1 insertion(+)
Rebasing (4/8)
5c27069677dfa335217b7186b3b9b744674c3935
[detached HEAD d7684ac] fix
 Date: Sat Aug 22 16:58:22 2015 +0900
 1 file changed, 1 insertion(+)
Rebasing (5/8)
7a9a22b69ee0dc9fb3721955bf6df9d039d9ecfd
[detached HEAD 7be7266] new
 Date: Sat Aug 22 16:57:41 2015 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 new.txt
Rebasing (6/8)
14f68399e4c45ba130ff563bc4ddf1a8882bbb0a
[detached HEAD 86a9de3] new
 Date: Sat Aug 22 16:57:50 2015 +0900
 1 file changed, 1 insertion(+)
Rebasing (7/8)
afb8162e649ee329bdb78ec21842731ac5d12234
Merge made by the 'recursive' strategy.
 new.txt | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 new.txt
Rebasing (8/8)
c70a307c79de2d200b5c23d1c8e2f2905d508c6a
[detached HEAD 08597e6] fix
 Date: Sun Sep 5 17:56:17 2015 +0900
 1 file changed, 1 insertion(+)
 master.txt | 2 ++
 1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/fix.

  5.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    「fix」ブランチが指す「コミットオブジェクト」の識別子が、「1.」と異なっています。


  6.ブランチの構成

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


    「Commit4」の変更内容を元に、「Commit4’」が新規に生成されています。
    「Commit5」の変更内容を元に、「Commit5’」が新規に生成されています。
    「Commit6」の変更内容を元に、「Commit6’」が新規に生成されています。
    「Commit7」の変更内容を元に、「Commit7’」が新規に生成されています。
    「Commit8」の変更内容を元に、「Commit8’」が新規に生成されています。
    「Commit9」の変更内容を元に、「Commit9’」が新規に生成されています。
    「Commit10」の変更内容を元に、「Commit10’」が新規に生成されています。
    「Commit11」の変更内容を元に、「Commit11’」が新規に生成されています。

通常のリベース

  比較のため、同じブランチ構成で通常のリベースを行ってみます。

  1.コマンドの実行

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

git rebase --verbose master


  2.コマンドの実行結果

    以下のように、リベース結果が表示されます。


  3.ブランチの構成

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


    上記の「6.」と比較すると、「fix」ブランチの履歴が一直線になっています。
    また、「Commit10」マージコミットは、リベース先に生成されていません。


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 24.04 その70 - Ubuntu 24.04.4 LTS のリリーススケジュール
    Ubuntu 24.04.4 LTS のリリーススケジュール Ubuntu 24.04.4 LTS のリリーススケジュールを紹介します。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • 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」を採用しています。
記事のピックアップ
オプション