◆ ファイル単位で分割なら簡単
◆ ファイル内の変更まで分割すると面倒

Git では過去のコミットを分割したりマージしたり並べ替えたりなかったことにしたり いろいろできます
コマンドでこういう複雑なのはやりたくないので GUI でやってます
いろいろ試したところ一番よかったのが Tortoise Git でした
エクスプローラ統合するので使ってるファイルマネージャによっては固まったりするのが欠点ですがそれ以外は万能です

ログ画面のウィンドウを出して 少し前のコミットを右クリックして Rebase 画面に行けばその間のコミットのスキップや連続するコミットのマージや 1 つのコミットの分割などができます
ほぼこれで不満はないのですが 1 点だけ不満があります

それは 1 ファイルに対するコミットの分割です
コミットを分割するときは 1 つめのコミットに含めたいファイルだけを選んでコミットして 残りの選ばれなかったファイルから 2 つめのコミットに入れるファイルを選択 その流れで分けたい数だけ分けて残りがなくなったら分割を終了できます
マウスでチェックボックス選ぶだけの簡単な操作です
しかし ここで 1 ファイルに対する変更を分割したくなると難しくなります

いったん今の状態のファイルを手動でどこかに退避してから 1 コミット目であるべき状態にファイルを修正します
それでコミットしたら次の段階で 2 コミット目にあるべき状態にファイルを修正します
それを続けて最後になったら退避していたファイルに戻して最終コミットをします
Git 使ってるのにコピーして保存しておかないといけないというのがなんとも言えない気分にさせてくれます
それでも退避しておかないと今のコミット分割の終わりでどの状態にすればいいのかわかりません
逆に言えば分割と言いながらも別の状態にしてしまうことができます

更にこのファイル変更作業は Rebase 処理の途中でファイルを開いて修正してとなるのが気持ち悪い部分でもあります
Rebase の処理中に別のプロセスでファイルを書き換えるのって整合性取れなくなりそうでやったらいけないものってイメージありましたし

ここだけは改善してほしいなと思いつつも どうあるのが良いのかと考えるとあまり良い方法が思いつかないので 作ってる人たちからみても難しいのかもしれません
diff 画面で行ごとにファイルをチェックするような動きになればある程度使いやすいのですけど 変更が多い場合や diff の結果が想定と違う場合とかもありますし

ファイル内でコミット分割してみる例

文章だけだと何言ってるのか伝わりづらいので 実際の作業手順を書いてみました

まずリポジトリを作成します
変更対象は example.json という名前の JSON ファイルにします
最初のコミットは "1" という名前で次のファイルをコミットします

{
"a": 100,
"b": 200,
"c": 300,
"d": 400,
"e": 500
}

つぎに example.json をこう変更して "2" という名前でコミットします

{
"a": 100,
"b": false,
"c": 300,
"d": false,
"e": 500
}

b と d のキーが false になりました

--- a/example.json
+++ b/example.json
@@ -1,7 +1,7 @@
{
"a": 100,
- "b": 200,
+ "b": false,
"c": 300,
- "d": 400,
+ "d": false,
"e": 500
}

このコミットしたあとで b と d を一度に変更せず別々のコミットにしたくなりました

では分割を始めます
ログウィンドウを出して "1" のコミットを右クリックして Rebase を始めます
Rebase のウィンドウを出したら Force Rebase にチェックを入れます
本来 Rebase って共通の親からの変更点を Rebase 先のコミットにくっつけるので 自分より前のコミットだとなにもしません
過去コミット変更するために Rebase するなら Force Rebase をする必要があります

Rebase 対象のコミットより新しいコミットのリストが出てくるのでここで "2" を Edit に変更します
右クリックから Skip や Squash などコミットに対する操作を選べます
分割するときは Edit です
Start Rebase ボタンで Rebase 処理を開始します

古いものから順にコミットされていき Edit に設定したコミットになると一旦止まります
今回は Edit ひとつだけなのですぐです
その画面で Edit/Split commit にチェックを入れて Ammend ボタンを押します
通常のコミット画面と同じ画面になるのでそこでファイルを選びます
ファイル単位での分割ならここで チェックボックスを操作するだけです
しかし 今回はファイル内の行単位での分割です
このコミットの確認画面がでている最中に example.json を編集します

まずは b のプロパティだけ false にして d はもとのままの状態にします
この状態でコミットしたら Add another commit? と聞かれたらときに yes を選びます
そして次のコミットで d も false にしてコミットします
今度はこれ以上することはないので Add another commit? の質問は no です

今回くらいなら最後のコミットで d を false にするだけですが ここの量が多いと "2" のコミットの状態ってどんなだっけ?となってしまいます
なので編集開始時には手動バックアップとっておくのがほぼ必須になると思ってます
今回みたいな変更が少なく 1 ファイルならまだ良いのですが 複数のファイルになるとこの作業が面倒になります

Git ではマージ簡単なのに分割が面倒なので普段から細かすぎるくらいにコミットしておくほうがよさそうです