【Sourcetree】Push済みの複数コミットを1つに纏める方法

その他
【Sourcetree】Push済みの複数コミットを1つに纏める方法

【Sourcetree】Push済みの複数コミットを1つに纏める方法

実作業で、何度も軽微な修正(変数名の変更とか)や、コメントの修正のような細かいコミットをPushしていると・・・ふと、

こんな意味も、内容も薄い、しょうもないコミット履歴・・・1つに纏めれないかなぁ

・・・と、思う事はないでしょうか?

できれば面倒なコマンドを使う事なく、Sourcetree のGUIだけで。

という事で、今回は Sourcetree のGUIのみで複数コミットを1つに纏める方法を調査したので、メモ代わりにブログで紹介したいと思います。

事前準備

この作業では「強制プッシュ」が必要になります。

そのため、事前に「強制プッシュ」を使用できるよう、Sourcetree の設定を変更しておきます。

(デフォルトでは「強制プッシュ」は使用できないようになっています)

メニューの「ツール」>「オプション」で オプションの設定画面を開き、タブの「Git」を選択します。

ここで「強制プッシュを有効にする」にチェックを入れて「OK」を押下します。

![](/api/media/clmedia000000000000000169/file" 初期のコミット履歴
下図が初期のコミット履歴となります。

![](/api/media/clmedia000000000000000184/file"

目的はこの「test_01_add」、「test_02_add」、「test_03_add」の3コミットを1つに纏めて「test_01&02&03_add」というコミットにする事です。

作業手順

1.インタラクティブなリベースを行う

元となる「テストプッシュ」を選択して右クリックを押下し、「・・・インタラクティブなリベースを行う」を実行します。

![](/api/media/clmedia000000000000000170/file" rebase」画面が表示されます。

(画面内には選択したコミットから後ろのコミット情報が一覧表示されています)

![](/api/media/clmedia000000000000000171/file" 2.3コミットの統合
Interactive rebase 画面で、まず一番上の「test_03_add」のコミットを選択し、「前のコミットとスカッシュ」を実行します。

![](/api/media/clmedia000000000000000172/file" squashed commits)」というコミットが作成されます。

![](/api/media/clmedia000000000000000173/file" squashed commits)」を選択し、再度「前のコミットとスカッシュ」を実行し「test_01_add」のコミットも統合してしまいます。

![](/api/media/clmedia000000000000000174/file" squashed commits)」と一つ下の「test_01_add」が統合され「test_03_add(+2 squashed commits)」というコミットが作成されます。

これで、「test_01_add」、「test_02_add」、「test_03_add」の3つのコミットが1つに纏められた事になります。
![](/api/media/clmedia000000000000000175/file" 3.コミットメッセージの編集
統合されたコミット「test_03_add(+2 squashed commits)」を選択し、「メッセージを編集」ボタンを押下します。

![](/api/media/clmedia000000000000000176/file"

![](/api/media/clmedia000000000000000177/file"

![](/api/media/clmedia000000000000000178/file" rebase」画面の「ok」ボタンを押下し、インタラクティブなリベースを終了します。

終了すると、下図のようなコミット履歴が表示されます。見た感じで分かると思いますが、枝分かれした樹系図となっています。

(この時点ではまだPush済みコミットの修正は完了していません)

![](/api/media/clmedia000000000000000179/file" 4.統合したコミットを上書きPush
統合したコミットを確定するために「プッシュ」ボタンを押下します。

![](/api/media/clmedia000000000000000180/file"

ここで枝分かれしている樹系図を上書きして1つにするために「強制プッシュ」にチェックして「プッシュ」ボタンを押下します。

![]( /api/media/clmedia000000000000000181/file"

![](/api/media/clmedia000000000000000182/file" 5.内容確認
上書きPushを実行すると、下図のように統合したコミットで、コミット履歴が更新されます。

内容を見ると分かりますが、Push済みの3つのコミットが1つに纏まった形となります。

![](/api/media/clmedia000000000000000183/file" 最後に
ここでは内容を理解しやすいよう、 master ブランチを使用して記載しています。

しかし常識的に、実務のような複数人で開発する環境下の masterブランチやdevelopブランチで、このようなコミット履歴を改ざんする処理は行うべきではありません。

あくまで、マージ前の自身の作業ブランチでのみ使用するのが、Gitを運用する上でのマナーだと思います。

上記を理解した上で、今回紹介した方法を使用して頂ければと思います。

以上で「【Sourcetree】Push済みの複数コミットを1つに纏める方法」は終了となります。

お読み頂き、ありがとうございました。

この記事をシェアする