git worktree を利用して、部分コミットを楽に行う方法

git worktree は、1つのレポジトリから複数の作業コピーを作成するためのコマンド。
それを利用して、元フォルダはコミット前の状態、worktreeに変更が入った状態を作成して、外部ツールで一部ずつ変更を元フォルダに適用してcommitする。
「git add -p」でも部分コミットが出来るとはいえ、とてもユーザーフレンドリーとは言えないのでよほど単純でない限りこっちのほうが楽だと思う。

# 元の作業コピーに、いくつかの変更が存在する状態から作業開始
git stash
git branch work
git worktree add ../work work

# 以下の作業後に、外部ツール(winmergeとか)で work→元フォルダ へ一部ずつ変更を適用してcommit
cd ../work
git stash pop

# 後片付け
cd ../元のフォルダ
rm -rf ../work
git worktree prune
git branch -d work



ちなみに、worktreeコマンドでは1つのブランチに対して複数のworktreeを作成することは出来ない。
それを許すとworktree-aで変更をコミットしたときに、worktree-bから見ると何もしていないのにレポジトリとindexの間に差異が発生するという問題が出るためである。