はじめに
今回はGit Fork
or Git Command
を利用しながら、rebase + squach
を使って複数のコミットを一つのコミットにまとめる方法について紹介したいと思います。
Git Forkでのやり方
Git Fork
だとGUIで操作できるのでかなりとっかかりやすいです。
rebaseするコミットを指定する
Git Fork
を立ち上げ、次の操作を行います。
- 左側にある
All Commits
を選択 - まとめたいコミットの一つ下にあるコミットを右クリック
Interactive Rebase/Interactively Rebase '----'
を選択。
まとめたいコミットをsquashに変更する
以下の画面が立ち上がると思うので、まとめたいコミットをsquash
に変更します。squash
を指定すると一つ前のコミットに結合されます。
またデフォルトでReword
になっている箇所があるかと思いますが、これはpick
と異なりコミットメッセージを変更することができます。
操作が終了したら右下のRebase
を指定します。
force pushをする
最後にPush
をするのですが、普通のPush
をしようとするとエラーが出てきてしまうので、Force Push
をします。
コマンドでのやり方
その前に
git rebase -i
の際のエディタを好きに変えることができます。私の場合はVim
が苦手なので、VSCode
に設定しています。
// git rebase -i 時のエディターをVSCode変更する $ git config --global sequence.editor 'code --wait'
git rebase -i コミットID
まずはgit rebase -i
コマンドを打ち込みます。
git rebase -i <commitID>
またコミットIDを知りたい場合は以下のコマンドを打つと表示されます。
$ git log --oneline f5150fc (HEAD -> feature/sample-branch, origin/feature/sample-branch) add test2.txt c299e93 add text 1317993 test1 2daa144 (origin/main, origin/HEAD, main) Initial commit
また以下のようないくつかの指定方法があるのでお好きな手法を利用してください。(他にもあるのかもしれません)
HEADから遡るコミット数を指定する
$ git rebase -i HEAD~2
コミットIDを指定する
$ git rebase -i 2daa144
ブランチ名を指定する
$ git rebase -i main
pickをsquashに変更する
squashを指定したコミットはその1つ前のコミットとまとめられます。
例えば以下のようなコミットログにおいて、3つのコミットを一つのコミットに修正したい場合は以下のコマンドを打ちます。
// コミットログ $ git log --oneline f5150fc (HEAD -> feature/sample-branch, origin/feature/sample-branch) add test2.txt c299e93 add text 1317993 test1 2daa144 (origin/main, origin/HEAD, main) Initial commit // f5150fc + c299e93 + 1317993 を一つのコミットにまとめる $ git rebase -i 2daa144
// 修正前 pick 1317993 test1 pick c299e93 add text pick f5150fc add test2.txt // 修正後 (pickをsに修正) pick 1317993 test1 s c299e93 add text s f5150fc add test2.txt
s
はsquash
の略ですね。squash
と表記したコミットは一つ上にあるコミットに結合されます。
Force Pushする
Force Push
をすることで複数のコミットを一つのコミットに変更することができます。
// feature/sample-branchに対してforce pushする $ git push origin feature/sample-branch --force
// コミットログ $ git log --oneline 4aebcc3 (HEAD -> feature/sample-branch, origin/feature/sample-branch) test1 2daa144 (origin/main, origin/HEAD, main) Initial commit
注意点としてPull
をしてしまうと変なことになってしまうこと、またPush
はできないのでForce Push
をする点気をつけてください。