💡

【Git】git rebaseでコミットを一つにまとめる

2021/09/05に公開

業務で「コミットを一つにまとめて!」との依頼があり、やり方が結構難しく毎回調べいるので手順をまとめる。

やりたいこと

  • ブランチAをmasterに普通にマージすると、ブランチの樹形図が複雑(ブランチAとmasterが枝分かれした状態)になるので、rebaseでコミットがブランチAとmasterでひと繋がりになるようにする。

手順

  1. ブランチAにチェックアウトし、git rebase masterを実行
  2. コンフリクトを起こした場合、コンフリクトを解決してgit add .(commitは不要)
  3. 待機していたrebaseを再度実行するためにgit rebase --continueを実行
  4. COMMIT_EDITMSGというファイルがエディタに表示されるので閉じて、差分がない表示になればrebase成功
  5. 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