aridai.NET
【Git】複数のコミットを1つにまとめる方法

はじめに

どうも、後期中間テストが終わり、ホッとしていたのも束の間、レポートや課題に追われてフガフガしているaridaiです。
今回は 複数のコミットを1つのコミットにまとめる ということをやってみたので、それのメモを残したいと思います。

作業前の状態

test ブランチがあります。
その中に3つのコミットがあります。

  • テストコミット1
  • テストコミット2
  • テストコミット3

git rebase作業前

作業後の状態

test ブランチに元々3つあったコミットを

  • テストコミット!!!

の1つにまとめています。

git rebase作業後

操作の流れ

以下に順を追って説明していきます。

コマンドを打ち込む

ターミナルに git rebase -i HEAD~3 と打ち込みます。
これは リベース を行うというコマンドで、-i オプションと、引数に HEAD~n を与えています。

この引数 HEAD~n は 「HEAD (そのブランチの現在のコミット) から HEAD を含めてn個のコミットを編集対象にする」という意味です。

git rebaseコマンド

git-rebase-todoを編集する

コマンドを打ち込むとエディタが立ち上がります。
(私の環境では VSCode に設定してありますが、大抵 Vi が立ち上がると思います。)

git-rebase-todo

ここでは「どのコミットをどのような操作をするのか」を以下のコマンドによっていじることができます。

コマンド 説明
p, pick コミットをそのまま残しておく。
r, reword コミットを残すが、コミットメッセージを編集する。
e, edit コミットの中身を編集する。
s, squash 前のコミットに統合する。
f, fixup 前のコミットに統合するが、コミットメッセージは破棄する。
x, exec 任意のコマンドを実行する。
d, drop このコミットを削除する。

今回は、0b9970e テストコミット24f14574 テストコミット3 に対して squash を使うことにしました。
これによって 642d144 テストコミット1 に2つのコミットを統合させ、1つのコミットにまとめることができます。

gitrebase-todo squashを指定

編集したら、保存をし、エディタを終了させます。

COMMIT_EDITMSGを編集する

すると、またエディタが立ち上がります。
ここではコミットメッセージの編集ができます。

COMMIT_EDITMSG 編集前

# で始まる行は無視されるので、この状態では

テストコミット1

テストコミット2

テストコミット3

というコミットメッセージになってしまうので、

テストコミット!!!

と書き換えてしまいましょう。

COMMIT_EDITMSG 編集後

編集が終わったら、保存をしてエディタを閉じましょう。

さいごに

成功した場合は

git rebase作業後

このようになると思います。
(SourceTree側の表示が作業前の状態の場合、これはターミナルでの編集との同期が取れていないだけなので、F5キーを押すと、更新がかかるので作業内容が適用されるはずです。)

というわけでこんな感じでコミットをまとめることができると思います。

作成日: 2017/12/09