Gitの複数コミットをrebaseとsquashでまとめる方法

Gitの複数コミットをrebaseとsquashでまとめる方法

コミットをまとめる

コミットをまとめるにはGitのrebaseを使用する。
(ほかにも方法があるが割愛)

まず下記のコマンドでログを表示。

git log --oneline

例としてこのようなログが表示されたとする。

C:\test>git log --oneline
6b78b9d last commit
d12871a test3
db92104 test2
e4ae077 test1
fe87ecf first commit

今回はtest1, test2, test3のコミットをまとめてtest allにする。

まず以下のコマンドを入力。

git rebase -i fe87ecf

するとテキストエディタが起動してこのような内容が表示される。
git-rebase-todo-01

pick ~の中にfe87ecf first commitが含まれていないのはgit rebase -i fe87ecfはfe87ecfよりあとのコミットを対象とするから。

pick ~の一覧はgit logの一覧とは順番が逆になっていることに注意。

次にtest2, test3のpickをsに変更。
pick db92104 test2 → s db92104 test2
pick d12871a test3 → s d12871a test3

こうしてpickをsに変更することで下図のようにtest1にまとめられる(というイメージで覚えると理解しやすい)
git-rebase-todo-02

上書き保存して閉じるとテキストエディタにコミットのメッセージが表示される。
git-rebase-todo-03

このまま閉じればtest3, test2, test1のコミットはtest1というメッセージでまとめられる。

今回はtest allに変更してまとめたいのでtest1をtest allにして上書き保存をしたら閉じる。
git-rebase-todo-04
以上の手順が完了するとこのようにコミットがまとめられる。

90a43ad last commit
c8f1922 test all
fe87ecf first commit
カテゴリーgit