背景
アプリ開発中に気づいたらコミットが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
以外のpick
をs
に書き換えてください。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 <ブランチ名>
これで終了です。
お疲れ様でした。最後に
プルリク時、履歴はできるだけまとめるように心がけましょう!