コミットの履歴を簡単に1つにまとめる方法

  • 2022.08.03
630
コミットの履歴を簡単に1つにまとめる方法

背景

アプリ開発中に気づいたらコミットが10件あり履歴が多くてみにくことがあったので
簡単に履歴を一つにまとめる方法があるので紹介します。
今回使うものは、Squash(スカッシュ)です。

Squashとは

Squashは複数のコミット履歴を1つのコミット履歴でまとめる時使います。

使い方

それでは実際にやってみよう!

前提条件として、gitのエディタとしてvimを使用します。

もしvimを使っていないなら設定を変更する必要があります。

1. 履歴を探す

まず初めに、下記のコマンドを実行します。

$ git merge-base [pushしたいブランチ] HEAD 

#例えば,リモートのmainにpushしたければ下記のように書きます
$ git merge-base origin/main HEAD

実行すると下記のように英数字が表示されます。

$ git merge-base origin/main HEAD
73c9372c8801d9ba05b791d57e67f95de1aa06da #この英数字をコピー

73c9372c8801d9ba05b791d57e67f95de1aa06da をコピーしてください。
皆さんは、自分のところに出た英数字をコピーしてください。

2. 貼り付ける

git rebase -i の後にコピーした、英数字を貼り付けます。

$ git rebase -i 73c9372c8801d9ba05b791d57e67f95de1aa06da #貼り付ける

3. 履歴をまとめる

  • git rebase -i 73c9372c8801d9ba05b791d57e67f95de1aa06daを実行すると

  • 下記のような画面になりましたら、キーボードで英数字のaを押してください。

  • すると-INSERT-と下に出ます。
    -INSERT-と出れば書き換えが可能になります。

    pick 950dd6f コミットのコメント1
    pick 565fd5g コミットのコメント2
    pick 5555j6f コミットのコメント3
    pick 484b548 コミットのコメント4
    pick 5b665gb コミットのコメント5
    pick 8g4bg4b コミットのコメント6
    pick 545454g コミットのコメント7
    pick 454gbb5 コミットのコメント8
    # Rebase 7911981..950dd6f onto 7911981 (1 command)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    # e, edit <commit> = use commit, but stop for amending
    # s, squash <commit> = use commit, but meld into previous commit
    //以下省略
    -INSERT-
  • 下記のように一番上のpick以外のpicksに書き換えてください。

    pick 950dd6f コミットのコメント1
    s 565fd5g コミットのコメント2
    s 5555j6f コミットのコメント3
    s 484b548 コミットのコメント4
    s 5b665gb コミットのコメント5
    s 8g4bg4b コミットのコメント6
    s 545454g コミットのコメント7
    s 454gbb5 コミットのコメント8
    # Rebase 7911981..950dd6f onto 7911981 (1 command)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    # e, edit <commit> = use commit, but stop for amending
    # s, squash <commit> = use commit, but meld into previous commit
    //以下省略
  • できましたら、保存をします。
    キーボードのescキーを押して、:wqを入力しEnterで実行します。

※印必ず、escキーを押してから:wqを入力してください。

  • もし、保存しないで抜けたい場合は:q!としてください。
    :wq

    その後はいつも通りpushします。

    ! [rejected]        feature/symptom_revision -> feature/symptom_revision (non-fast-forward)
    error: failed to push some refs to 'github.com:jurabiinc/oarfish.git'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Integrate the remote changes (e.g.
    hint: 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.

    push時に、上記のエラーが出るときは、強制pushしてください。

    $ git push -f origin <ブランチ名>

    これで終了です。
    お疲れ様でした。

    最後に

    プルリク時、履歴はできるだけまとめるように心がけましょう!