1. 導入: なぜコミット履歴の整理が重要なのか
チーム開発において、プルリクエスト(PR)のコミット履歴が「修正」「微修正」「タイポ修正」といった無意味なコミットで埋め尽くされていることはありませんか?きれいな履歴は、後からコードを追うメンバーにとって非常に重要です。しかし、手動でrebaseを行うと順序の並び替えミスが発生しやすいという課題があります。`git rebase –autosquash`は、この作業を自動化し、ミスなく安全にコミットを整理するためのプロ必須のテクニックです。
2. 基礎知識: –fixupと–autosquashの仕組み
まず、関連する2つの概念を理解しましょう。
–fixup: 特定のコミットに対して「このコミットの内容で修正する」というフラグを立てる機能です。コミットメッセージの先頭に「fixup! 」という文字列が付与されます。
–autosquash: `git rebase -i`を実行する際、`fixup! `で始まるコミットを、対象のコミット直下に自動的に移動させ、さらに自動的にsquash(統合)設定にしてくれるオプションです。これにより、手作業でエディタを開いて行を入れ替える手間が完全に不要になります。
3. 実装/解決策: ワークフローの構築
実際の運用手順は非常にシンプルです。
1. 修正したいコミットのハッシュ(
2. `git commit –fixup
3. `git rebase -i –autosquash
これだけで、Gitが自動的に履歴を整理してくれます。
4. サンプルプログラム: 具体的なコマンド操作
以下の手順をそのままターミナルで実行してみてください。
1. 現在のコミット履歴を確認
git log –oneline
2. 例えば「abc1234」というコミットを修正したい場合、以下のコマンドを打つ
これにより「fixup! abc1234」というメッセージでコミットが作られる
git commit –fixup abc1234
3. リベースを開始する(対象コミットの親を指定)
–autosquashオプションにより、自動的に統合設定が適用される
git rebase -i –autosquash abc1234^
4. エディタが開くが、既に「fixup」設定になっているため、そのまま保存して閉じるだけで完了
これで、abc1234とfixupコミットが一つにまとまります
5. 応用・注意点: 現場で役立つアドバイス
注意点: すでにプッシュ済みの履歴は触らない
`git rebase`は過去のコミットIDを書き換える操作です。すでにリモートリポジトリにプッシュ済みのコミットに対してこれを行うと、共同開発者に迷惑がかかります。この操作は、あくまで「ローカルで作業中のブランチ」のみで行うようにしてください。
応用: エイリアスの活用
頻繁に使うコマンドなので、以下のようにGitエイリアスを登録しておくと非常に効率的です。
`git config –global alias.fixup ‘!f() { git commit –fixup “$1”; }; f’`
これで、`git fixup

コメント