お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

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

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

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

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

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

・・・と、思う事はないでしょうか?
できれば面倒なコマンドを使う事なく、Sourcetree のGUIだけで。

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

事前準備

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

そのため、事前に「強制プッシュ」を使用できるよう、Sourcetree の設定を変更しておきます。
(デフォルトでは「強制プッシュ」は使用できないようになっています)

メニューの「ツール」>「オプション」で オプションの設定画面を開き、タブの「Git」を選択します。
ここで「強制プッシュを有効にする」にチェックを入れて「OK」を押下します。

初期のコミット履歴

下図が初期のコミット履歴となります。

元となる「テストプッシュ」から「test_01_add」、「test_02_add」、「test_03_add」の3コミット(Push済み)が行われている状態です。
目的はこの「test_01_add」、「test_02_add」、「test_03_add」の3コミットを1つに纏めて「test_01&02&03_add」というコミットにする事です。

作業手順

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

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

実行すると、下記のような「Interactive rebase」画面が表示されます。
(画面内には選択したコミットから後ろのコミット情報が一覧表示されています)

2.3コミットの統合

Interactive rebase 画面で、まず一番上の「test_03_add」のコミットを選択し、「前のコミットとスカッシュ」を実行します。

実行すると、下図のように「test_03_add」と一つ下の「test_02_add」のコミットが統合され「test_03_add(+1 squashed commits)」というコミットが作成されます。

更に「test_03_add(+1 squashed commits)」を選択し、再度「前のコミットとスカッシュ」を実行し「test_01_add」のコミットも統合してしまいます。

実行すると、下図のように「test_03_add(+1 squashed commits)」と一つ下の「test_01_add」が統合され「test_03_add(+2 squashed commits)」というコミットが作成されます。
これで、「test_01_add」、「test_02_add」、「test_03_add」の3つのコミットが1つに纏められた事になります。

3.コミットメッセージの編集

統合されたコミット「test_03_add(+2 squashed commits)」を選択し、「メッセージを編集」ボタンを押下します。

ボタンを押下すると、下図のような編集画面が表示されるので、コメントを編集し、「ok」ボタンを押下します。

編集が完了すると、下図のように、コミットコメントが編集した内容で変更されます。

編集された変更を確認したら、「Interactive rebase」画面の「ok」ボタンを押下し、インタラクティブなリベースを終了します。
終了すると、下図のようなコミット履歴が表示されます。見た感じで分かると思いますが、枝分かれした樹系図となっています。
(この時点ではまだPush済みコミットの修正は完了していません)

4.統合したコミットを上書きPush

統合したコミットを確定するために「プッシュ」ボタンを押下します。

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

途中下図のような確認メッセージが表示されるので「はい」を押下し、強制Pushを実行します。

5.内容確認

上書きPushを実行すると、下図のように統合したコミットで、コミット履歴が更新されます。
内容を見ると分かりますが、Push済みの3つのコミットが1つに纏まった形となります。

最後に

ここでは内容を理解しやすいよう、 master ブランチを使用して記載しています。
しかし常識的に、実務のような複数人で開発する環境下の masterブランチやdevelopブランチで、このようなコミット履歴を改ざんする処理は行うべきではありません。
あくまで、マージ前の自身の作業ブランチでのみ使用するのが、Gitを運用する上でのマナーだと思います。
上記を理解した上で、今回紹介した方法を使用して頂ければと思います。

以上で「【Sourcetree】Push済みの複数コミットを1つに纏める方法」は終了となります。
お読み頂き、ありがとうございました。

【Sourcetree】Push済みの複数コミットを1つに纏める方法 2022-11-28 15:10:27

コメントはありません。

4098

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp