git でコミットの整理をしたりするのに役立ちそうなノウハウ

自分はしばしば「めっちゃいろんな対応が入ったブランチ」を作ってしまいがち(通称全部入りブランチ)で、この全部入りブランチから機能ごとに複数に分割したブランチを作ってから Pull Request を出しています。

その時のまとめ方を個人の備忘録としてまとめます。
(計画的にコミットをまとめられる人には不要な知識なので、そういった方向けではない事を前置きします)

① 特定のブランチの特定のファイルだけチェックアウトする

# ブランチ内のファイルだけを指定してチェックアウト
$ git checkout <ブランチ名> -- <ファイル名>

とやることで特定のファイルだけ取ってこれる


② 特定のブランチと特定のブランチの差分リストを取得する

git diff temp_branch branch --name-only

みたいに書くと temp_branch と branch の差分となっているファイル一覧を取得できる

①、②を組み合わせて差分だけを抽出する

# feature-branch と main ブランチの差分ファイルのリストを取得
git diff temp_branch branch --name-only > diff-files.txt

# 差分ファイルを現在のブランチにチェックアウト
while IFS= read -r file; do
    git checkout temp_branch -- "$file"
done < diff-files.txt

# 一時ファイルを削除
rm diff-files.txt

とする事で差分リストを一つずつチェックアウトして変更を反映させることができる

あとはこれを使って分離したブランチ毎に変更を整理してコミットする
(あまりまとめて一気にコミットすると何のコミットなのかがわからなくなるので「このコミットはこの機能を実装した」「このコミットはこのファイルを新たに追加した」「このコミットではこのファイルが要らないので削除した」といったある程度の単位でまとめるのが読み手にとっても良い)



この記事が気に入ったらサポートをしてみませんか?