KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

Gitで既存のコミットを2つに分割する方法


はじめに

Gitはソフトウェア開発において不可欠なツールですが、時には過去のコミットを修正したくなるケースもあります。特に、1つの大きなコミットを複数の小さなコミットに分割したいというケースを解決する方法を今回はご紹介します。

シナリオ

あるコミット(例:8d496132fb8a69372a43a2277fc06b4d325c70e6)に複数の異なる変更が混在しており、それを2つの別々のコミットに分けたい!

手順

1. 対話的リベースの開始

git rebase -i master

2. コミットの選択

テキストエディタが開き、リベースするコミットの一覧が表示されます。対象のコミット(8d496132fb8a69372a43a2277fc06b4d325c70e6)を見つけて、その行の pickedit または e に書き換えます。

3. コミットの編集

git reset HEAD~

4. 新しいコミットの作成

次に、git add -p もしくは git add [ファイル名] コマンドを使って対話的にまたは明示的に変更をステージングします。これにより、複数のファイルの変更を個別にまたはまとめてステージングできます。

git add -p または git add [ファイル名]
git commit -m "First part of the changes"
git add . または git add [残りのファイル名]
git commit -m "Second part of the changes"

1つのファイルを分割してコミットしたい場合は git add -p コマンドを使って対話的に変更をステージングします。このコマンドは変更されたファイルの各ハンク(変更部分)を表示し、それを個別にステージングするかどうかを選ぶことができます。ファイルが別々なら git add [ファイル名] でOKですね。

5. リベースの続行

git rebase --continue

注意事項

この操作は歴史を改変するものですので、他の人と共有しているブランチに対して行う場合は注意が必要です。コンフリクトが発生した場合、解決する必要があります。

まとめ

以上が、Gitで既存のコミットを2つに分割する手順です。この技術はGitを更にパワフルに使うための一つの手法です。注意点を理解した上で、ぜひ活用してください。