💡
【Git】git rebaseでコミットを一つにまとめる
業務で「コミットを一つにまとめて!」との依頼があり、やり方が結構難しく毎回調べいるので手順をまとめる。
やりたいこと
- ブランチAをmasterに普通にマージすると、ブランチの樹形図が複雑(ブランチAとmasterが枝分かれした状態)になるので、rebaseでコミットがブランチAとmasterでひと繋がりになるようにする。
手順
- ブランチAにチェックアウトし、
git rebase master
を実行 - コンフリクトを起こした場合、コンフリクトを解決して
git add .
(commitは不要) - 待機していたrebaseを再度実行するために
git rebase --continue
を実行 -
COMMIT_EDITMSG
というファイルがエディタに表示されるので閉じて、差分がない表示になればrebase成功 -
git push -f
でリモートにpush
これで終わりです。
コンフリクトしなかった場合、2~4の手順は不要です。
その他
ブランチAでのrebaseを途中でやめて、例えば別のブランチBでrebaseしようとすると
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr ".git/rebase-merge"
and run me again. I am stopping in case you still have something
valuable there.
というエラーが出ます。
これはブランチAでrebaseがまだ途中で止まっている状態で新しいrebaseを実行しようとしてエラーが出ています。
これを解決するにはgit rebase --abort
で前のrebaseを取り消せばOKです。
以上
Discussion