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