Git でコミットをまとめる(squash)の具体的なコード例と解説
手順
インタラクティブリベースを開始する:
git rebase -i HEAD~N
このコマンドで、直近 N 個のコミットをインタラクティブモードでリベースします。
例
git rebase -i HEAD~3
エディタで以下のように変更:
pick <commit-hash>
squash <commit-hash>
squash <commit-hash>
注意点
- リベースはローカルの履歴を変更するため、公開済みのブランチには使用しないように注意してください。
squash
の代わりにfixup
を使うこともできます。これは、元のコミットメッセージを捨てて、前のコミットのメッセージのみを残します。
git rebase
コマンドは強力ですが、使い方を誤ると履歴が複雑になる可能性があります。慎重に使用する必要があります。- Git GUI ツールを使うと、インタラクティブリベースを視覚的に操作できる場合があります。
日本語訳
手順は次の通りです。
注意点は、リベースはローカルの履歴を変更するため、公開済みのブランチには使用しないようにすることです。また、squash
の代わりに fixup
を使うこともできます。これは、元のコミットメッセージを捨てて、前のコミットのメッセージのみを残します。
git rebase -i HEAD~N
-i
: インタラクティブモードでリベースを開始HEAD~N
: 現在(HEAD)からN個前のコミットを指定
git rebase -i HEAD~3
実行後:
- テキストエディタが開き、リベースするコミットの一覧が表示されます。
- 各コミットの前に
pick
やsquash
などのコマンドが書かれています。
例:
pick <commit-hash> # このコミットはそのまま
squash <commit-hash> # このコミットを一つ前のコミットにまとめる
squash <commit-hash> # このコミットも一つ前のコミットにまとめる
- ファイルを保存すると、新しいコミットメッセージを入力するプロンプトが表示されます。
git rebase -i <base-commit>
<base-commit>
: 基準となるコミットのハッシュ値
git rebase -i abcdef123
- 公開済みのブランチには注意: リベースはローカルの履歴を変更するため、公開済みのブランチに対しては慎重に行う必要があります。
fixup
コマンド:squash
と似ていますが、元のコミットメッセージは残しません。- GUI ツール: Git の GUI ツール (SourceTreeなど) を使うと、視覚的に操作できる場合があります。
- コミット履歴の確認:
git log
コマンドでコミット履歴を確認できます。 - インタラクティブモードでの操作:
git rebase -i
で開いたエディタで、pick
、squash
、edit
などのコマンドを使ってコミットを操作できます。
注意: リベースは強力な機能ですが、誤った操作を行うと履歴が複雑になる可能性があります。慎重に行うようにしましょう。
git rebase -i を使った方法(再掲)
- 学習コスト: コマンドのオプションやインタラクティブモードの操作に慣れる必要がある。
git reset と git commit --amend を組み合わせる方法
- 注意点:
サブモジュールを利用する方法
- 目的: 特定の機能を別のリポジトリとして管理し、メインのリポジトリとの関係をゆるく保つ。
- 特徴:
- プロジェクトの構造を明確にし、メンテナンス性を向上させる。
squash
ではなく、サブモジュールのコミットを更新することで機能の更新を行う。
- 注意点:
ブランチを切る方法
- 目的: 特定の機能開発を別のブランチで行い、完成後にマージする。
- 特徴:
- 注意点:
GUI ツールを利用する方法
- 目的: コマンドライン操作が苦手な場合や、視覚的に操作したい場合。
- 注意点:
どの方法を選ぶべきか?
- 機能を独立して管理したい: サブモジュール。
- 機能ごとの開発履歴を分けたい: ブランチを切る。
- コマンドライン操作が苦手: GUI ツール。
選ぶ際のポイント
- 履歴の管理: どの程度細かい履歴を残したいか。
- チームでの作業: チームで作業する場合は、他のメンバーとの連携を考慮する。
- 複雑さ: 操作の複雑さや学習コスト。
- インタラクティブリベースの注意点: 公開済みのブランチに対しては慎重に行う。
- サブモジュールの注意点: サブモジュールの管理は少し複雑。
- GUI ツール: SourceTree、GitHub Desktopなど、様々なツールがある。
ご自身のプロジェクトに合った方法を見つけて、効率的にGitを使いこなしましょう。
より詳細な情報を知りたい場合は、以下のキーワードで検索してみてください。
git rebase -i
git reset
git commit --amend
git submodule
git branch
- Git GUIツール
git rebase squash