Gitでの開発で、皆さんはこんな体験はありませんか?

  • 3つ前のコミットのメッセージにミスがあった。修正したい・・・
  • このコミットの順番入れ替えたいなぁ
  • このコミットはホントはいらなかったから削除したいなぁ

…… 実はそれGitでできるんです!今回はGitクライアントソフトのSource Treeソース・ツリーでコミットログを修正する便利な機能「rebase interactiveリベース・インタラクティブ」を解説します。

コミットの再編集ができる機能とは?

Gitではコミットを再編集する機能を「git rebase interactive」といいます。例えば、コミットの入れ替えや編集、統合、削除ができます。とはいっても実は今あるコミットそのものを編集するのではなく、実際は新しくコミットのコピーを作成して一つづつコミットを組み立てる機能になります。

Git rebase interactiveとは?

Source Treeでコミットログを編集しよう

Source Treeでコミットログを操作する手順を解説します。編集を行いたい一つ手前のコミットを右クリックし[CommitAの子とインタラクティブなリベースを行う]を選んでください。コミットログを操作するためのウィンドウ「Interactive rebase」が表示されます。

このウインドウを使えば、様々なコミットの再編集ができます。以下にて逆引きとしてまとめました。

GitRebase-編集ウィンドウ_マークアップ

基本動作を抑えよう

この「Interactive rebase」ウインドウには様々なボタンがありますが、まずは基本操作として「OK・キャンセル・リセット」の3つを抑えましょう。

作業を終えたら右下の②[OK]ボタンをクリックすると、コミットログが確定されます。③[キャンセル]ボタンをクリックすると作業は破棄され元のツリービューに戻ります。元のツリービューへ戻らずサクッと元に戻す場合は①[リセット]ボタンをクリックします。編集ウィンドウ内の左下にあるので、よくわからなくなってしまった場合は焦らずにクリックをして戻しましょう。

コミットメッセージを書き換える方法

1つ前のコミットメッセージを編集することは、コマンドgit commit --amendでも可能ですが、今回のやり方だといくつ前でも編集が可能です。編集したいコミットを選択した状態で④[メッセージを編集]をクリックするとコミットメッセージの編集欄が表示され、編集後[OK]ボタンをクリックすると変更がコミットログ編集箇所に反映されます(※1)。

2つのコミットをまとめる方法

まとめたい2つのコミットの新しいコミットの方を選択し、⑤[前のコミットとスカッシュ]をクリックします(※1)。

コミットの順番を変更する方法

移動させたいコミットを選択した状態で、⑦[↑][↓]ボタンをクリックします。同ファイルの同位置を修正したコミットを前後させるとコンフリクトが起きる可能性があるので注意しましょう(コンフリクトが発生した場合エラーが発生し元に戻ってしまいます)。

コミットを削除する方法

削除させたいコミットを選択した状態で⑥[削除]ボタンをクリックします。削除したコミットは打ち消し線が入ります。戻したくなった場合は削除と同じ位置に配置される[リストア]ボタンをクリックします。

コミット内容を書き換える方法

⑧[Ammend Commit ?]の列にチェックマークを入れるとコミット内容を編集することが可能になります。詳しくは解説画像をまじえて後述します。

※1 執筆時点のWindows版(バージョン 1.6.22)だとコミットメッセージに日本語が混ざっていると文字化けをしました(macOSでは大丈夫でした)

次のページではコミット内容を書き換える方法を解説します。