ファイルの一部だけをコミットする
各ブロックは別のケースであり、一括実行するスクリプトではありません。自分のリポジトリに合うケースを選び、ブランチ名、パス、VERIFIED_COMMITを置き換えてください。中止コマンドは対応する進行中の操作だけに使い、両方の選択肢を実行しないでください。
要点
Gitはインデックスの内容をコミットします。修正だけをステージし、他の編集は作業ディレクトリに残して別のコミットに分けます。
例と前提条件
例では同じファイルに修正とデバッグ出力があります。それぞれを区別して確認できるテキスト変更が前提です。
変更前に状態を確認する
git diffとgit diff --cachedを比較します。前者は未ステージの変更、後者は次のコミットに含まれる内容を示します。
git status --short
git diff
git diff --cached参照または別のチェックアウトを保つ
変更のステージは残りの編集を消しません。インデックスと作業ディレクトリは、それぞれ確認できる別の状態です。
最初の手順
FluxGitでdiffを開き、修正のStage changeを選びます。コミット画面でデバッグ出力が未ステージのままか確認します。
別の結果を意図して選ぶ
端末ではgit add -pでhunkを選びます。必要に応じてsで分割し、eでパッチを編集できます。
git add -p -- app.py
git diff --cached制限と例外
FluxGitの最小単位はhunk内の一つの変更です。六行からなる変更は六行まとめてステージします。マウスで任意の行範囲を選ぶ機能ではありません。
競合と後片付け
ステージ解除はファイルを残しますが、破棄は内容を変更します。FluxGitは部分破棄前に安全用スナップショットを作ります。両者は別の操作です。
結果を確認する
コミット前にgit diff --cached、後にgit showを確認します。git diffでも残りの作業がファイルに残っていることを確認してください。
git show --stat HEAD
git diff
git status --shortよくある質問
通常の非共有コミットならgit reset --soft HEAD^で内容をインデックスへ戻せます。状態を確認し、共有済み履歴の書き換えは関係者と調整します。
FluxGitで操作を確認する
Commit Studioはdiffとメッセージを同時に表示します。内容を確認しながらメッセージを書き、一つの意図を一つのコミットにまとめられます。
Git公式ドキュメント
Gitでファイルの一部だけをコミットする
同じファイルにバグ修正とデバッグ出力がある場合、修正だけをステージできます。Gitのステージング領域、FluxGitのStage change、git add -pを解説します。
テスト用リポジトリで収録しています。
ナレーションの文字起こしを読む
- バグを修正しましたが、同じファイルにデバッグ出力も残っています。出力を含めず、修正だけをコミットしたい場面です。
- FluxGitで開いたapp.pyです。変更が2つあります。
- Gitがコミットするのはフォルダーではなく、ステージング領域です。最初は両方の変更がディスク上だけにあります。Stage changeで修正だけをステージすると、その内容だけがコミットされ、デバッグ出力は未コミットのままディスク上に残ります。
- ファイルを開きます。差分には2つの変更が表示され、それぞれにStage changeボタンがあります。
- 修正のStage changeを押します。その変更だけがステージされ、出力はそのまま残ります。
- コミットパネルに戻ると、修正はステージ済みで、出力は未ステージです。
- メッセージを書いてコミットします。
- 新しいコミットには修正だけが含まれます。出力は未コミットのままディスク上に残っています。
- やり直したい場合は、取り消しでコミットを戻します。修正はステージング領域に戻り、ファイルは変わりません。
- ターミナルではgit add -pを使います。変更ごとに確認されるので、修正にはyes、出力にはnoと答え、その後コミットします。
- まとめです。ファイル全体ではなく変更をステージし、1つのコミットに1つの目的を持たせます。間違えたら取り消します。次は直前のコミットを修正する方法です。