Gitで複数のコミットを1つのコミットにまとめる

概要

スカッシュ (squash) は、Gitで複数のコミットを1つのコミットにまとめる操作です。履歴を整理し、複数の小さな変更をまとめてプロジェクトの履歴をわかりやすくできます。スカッシュは、特に細かい変更を何度も行っている場合に効果的で、他の開発者にわかりやすいコミット履歴を提供する際にも便利です。

スカッシュを行う方法

GitHubDesktopでの手順

CUIでの手順

1. インタラクティブリベースの開始

スカッシュしたいコミットの数を指定して、インタラクティブなリベースを開始します。例えば、直近の3つのコミットを1つにまとめたい場合は次のようにします。

git rebase -i HEAD~3

HEAD~3は、現在のブランチの直近3つのコミットを対象にすることを意味します。

2. エディタでの「squash」指定

エディタが開くので、最初のコミットにはpickを残し、それ以降のコミットにはsquashを指定します。

pick <commit_hash> コミットメッセージ1
squash <commit_hash> コミットメッセージ2
squash <commit_hash> コミットメッセージ3
  • pick:そのままコミットを残す
  • squash:直前のコミットに結合する

3. 新しいコミットメッセージの編集

次に、スカッシュ後のコミットメッセージを編集する画面が表示されます。スカッシュされる各コミットのメッセージが記載されているため、必要に応じて編集し、適切なメッセージにまとめます。その後、保存して閉じます。

4. リベースの完了

編集が完了すると、リベースが自動的に完了し、指定した複数のコミットが1つにまとめられます。これでスカッシュが完了です。

スカッシュの利点

  • 履歴が見やすくなる:細かい変更が多い場合でも、主要な変更点が分かりやすくまとまります。
  • 開発者間のコラボレーションがスムーズに:履歴が簡潔にまとまっていると、他の開発者がプロジェクトの進行状況を把握しやすくなります。

注意点

  • 履歴が変わる:スカッシュを行うとコミットのハッシュが変更されるため、すでに他の開発者と共有しているリモートブランチに対してスカッシュを行うと、履歴の整合性に影響を及ぼす可能性があります。一般的には、リモートにプッシュする前のローカルブランチに対してスカッシュを行うのが望ましいです。

この手順に従ってスカッシュを行うことで、履歴がよりわかりやすく、他の開発者にとっても管理しやすくなります。