gitはプログラムやコーディングに関わる仕事をしているとほぼ必ず使うことになりますが、作業に忙しいと、きりのよい所でコミットをすることを繰り返し、自分の作業メモのようなコミットログになってしまいがちだと思います。
それでも動きますので、「それの何が悪いのか」といえば、
・プルリクを出すなど他の人が見た時にコミット単位で見る人もいるので、見る人が見づらい
・変更の本質でないコミットが残り続けることはよろしくない
などが考えられます。
git rebaseの記事はたくさん書かれていますが、rebaseする為の最小手順をまとめたいと思います。
- git log --oneline
コミットログを確認します。
git log --onelineの結果です。
[root@homelibrary estate]# git log --oneline
b4a5830 txtをlogに変更
53f269c qrアクセスカウンタを設置
781792d マンション用地一覧を追加
9985509 サイトマップ更新
f7a9e7a 下京区をスマホトップにも追加
4d49436 下京区を追加
0d05598 管理画面に物件名を追加
f7a9e7a 下京区をスマホトップにも追加
4d49436 下京区を追加
の2コミットを9985509 サイトマップ更新
に対し1つにまとめます。
- git rebase -i 0d05598
git logの時とは時間の順序が逆に表示されます。
まとめたいコミットの一つ前のコミットを指定してrebase -i
します。
pick 4d49436 下京区を追加
pick f7a9e7a 下京区をスマホトップにも追加
pick 9985509 サイトマップ更新
pick 781792d マンション用地一覧を追加
pick 53f269c qrアクセスカウンタを設置
pick b4a5830 txtをlogに変更
vimを使い以下のように編集します。
まとめたいコミットの下にまとめられたいコミットを移動し、pickをfixupに変えます。
pick 9985509 サイトマップ更新
fixup 4d49436 下京区を追加
fixup f7a9e7a 下京区をスマホトップにも追加
pick 781792d マンション用地一覧を追加
pick 53f269c qrアクセスカウンタを設置
pick b4a5830 txtをlogに変更
編集が終わったら:wq
で保存して下さい。
- git log --oneline
ef99609 txtをlogに変更
19b4e5d qrアクセスカウンタを設置
2af24c5 マンション用地一覧を追加
6f53fc1 サイトマップ更新
0d05598 管理画面に物件名を追加
f7a9e7a 下京区をスマホトップにも追加
4d49436 下京区を追加
の2コミットが無くなり、6f53fc1 サイトマップ更新
に対し一つにまとまりました。
fixupを使った場合、まとめられたコミットログが残りません。
コミットログを残したい場合はsquashを使って下さい。
fixupの短縮形はf、squashの短縮形はsです。
失敗する場合
また、git rebase -i実行後に(no branch)になっている場合は、rebaseに失敗しています。
Automatic cherry-pick failed.
というエラーが出ていないでしょうか?
上記の場合は競合して失敗しているので、競合解決後
git add <ファイル>
git commit --amend
git rebase --continue
として下さい。
以下の記事を参考にさせて頂きました。
https://chaika.hatenablog.com/entry/2019/02/25/170000