2
1

More than 1 year has passed since last update.

git rebase でスカッシュする

Last updated at Posted at 2020-01-08

Gitで後から履歴が見やすいように、コミットをまとめたいときがあります。
そうしたとき git rebase でコミットをまとめられます。

コミットをまとめる

# ログを確認
$ git log --oneline
# a23f186 Add piyopiyo <- このコミットと
# 85f004e (origin/develop) Change hogehoge <-このコミットをまとめたいなら
# 18f26a5 Update fugafuga <- このコミットIDをコピー
# ...

# インタラクティブモードで開く
git rebase -i <コピーしたID>

git rebase は履歴が気に入らないから変更するときのコマンドです。
iはインタラクティブモードでコミットを修正できます。
vi で開くので、コミットで必要なメッセージを消したり処理していきます。

# git log --oneline と逆順(新しいコミットほど下)で、最新のコミットまで履歴が表示される
pick 85f004e Change hogehoge <- 一番上(古い)のpickはそのまま
pick a23f186 Add piyopiyo <-まとめたいコミットはpickをsに変更

まとめたいコミットが多い場合は、 Shift+vで範囲選択→:s/置換対象文字列(pick)/置換後文字列(s)/gcEnter等で置換すると楽です。


# GitHubの変更点と比べて問題ないか確認
$ git log -p

最後にプッシュして終わりです。


git push origin foo --force-with-lease

まとめるコミットを間違えた場合

git reflog

0c2faef (HEAD -> feature-ar-kit) HEAD@{0}: reset: moving to HEAD@{7}
dca12e6 HEAD@{1}: rebase -i (finish): returning to refs/heads/feature-ar-kit
dca12e6 HEAD@{2}: rebase -i (squash): Update for Android build
73a993f HEAD@{3}: rebase -i (squash): # This is a combination of 3 commits.
54836a8 HEAD@{4}: rebase -i (squash): # This is a combination of 2 commits.
13076fd HEAD@{5}: rebase -i (start): checkout 8690d54
33c3f76 HEAD@{6}: rebase -i (finish): returning to refs/heads/feature-ar-kit
33c3f76 HEAD@{7}: rebase -i (squash): Update to implement eyeball and body angle x z move

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1