- 著者
- app-hacks
- 公開日
- 更新日
- 確認日
Git / コミット / Workflow
Gitで対象ファイルだけをコミットする:stage確認で変更混入を防ぐ方法
対象ファイルだけをstageし、staged diffで確認して意図しない変更をコミットへ混ぜないGitの手順を解説します。
Gitで対象ファイルだけをコミットする方法
ひとつの作業ディレクトリで複数の変更を並行していると、「今コミットしたい変更」と「まだ途中の変更」が混ざります。この状態でgit add .やgit add -Aを実行すると、意図しないファイルまで次のコミットへ入ることがあります。
ここでは、特定の変更だけを安全にコミットするために、確認、stage、レビュー、記録の順で進めます。重要なのはコマンドを短く打つことではなく、コミットに入る差分を自分で説明できる状態にすることです。
最初に作業ツリー全体を確認する
stageする前に、変更・削除・未追跡ファイルを確認します。
git status --short
出力の左側はstage済みの状態、右側はまだstageしていない状態を表します。たとえば M file.mdは作業ツリーだけで変更されたファイル、M file.mdはstage済みのファイルです。??は未追跡ファイルなので、生成物やローカル設定が紛れていないかをここで見ます。
この一覧を確認せずに一括stageすると、別作業のコード、下書き、ローカル補助ファイルを取り込むリスクがあります。対象外の変更があること自体は問題ではありません。問題なのは、その存在を確認しないままコミット対象に含めることです。
パスを明示してstageする
git add src/content/blog/20-git-selective-commit-cloudflare-pages.md
git add TASK/draft-articles-20-29-ja-en-2026-09-26.md
ファイル単位でパスを指定すると、今回のコミットの境界が明確になります。ディレクトリを指定すると、その配下にある別作業のファイルまで含めてしまう可能性があります。複数ファイルをstageする場合も、必要なパスだけを並べる方が安全です。
変更の一部だけを入れたい場合は、対話形式のgit add -pを使います。ただし、パッチの分割結果を理解できないと別の行まで含めやすいため、最初はファイル単位のコミットを優先する方が判断しやすくなります。
git add -p src/components/ArticleCard.astro
stage済みの差分を読む
通常のgit diffは、まだstageしていない変更を表示します。コミットへ入る内容を確認するには、必ず--cachedを付けます。
git diff --cached --stat
git diff --cached
最初のコマンドでは、変更されたファイル数と行数を確認します。想定より多い場合は、誤って対象外のファイルをstageした可能性があります。次のコマンドでは、追加・削除された内容を実際に読みます。タイトルだけの変更なら本文全体が入っていないか、設定変更なら秘密情報や環境固有の値が入っていないかを確認してください。
この確認はレビューを後回しにしないための最後の境界です。コミット後に差分を見つけても履歴の修正はできますが、共有ブランチへpushした後では関係者や自動デプロイへの影響が大きくなります。
誤ってstageした変更を戻す
stageした内容が違っていても、作業ツリーの編集を捨てる必要はありません。次のコマンドはstageだけを解除します。
git restore --staged path/to/file
もう一度git status --shortとgit diff --cachedを確認し、正しいファイルだけをstageし直します。git restore path/to/fileは作業ツリーの内容まで戻す操作なので、未保存の編集を残したい場面では使い分けが必要です。
コミット後に記録を確認する
レビューが終わってからコミットします。
git commit -m "fix: correct article metadata"
git show --stat --oneline HEAD
コミットメッセージは、何を変えたかが分かる短い説明にします。git showで直前のコミットを確認すれば、意図したファイルだけが記録されたかを最後に確かめられます。pushやデプロイの前にこの確認を挟むと、ローカル作業の混入を早い段階で止められます。
対象を確認してから個別にstageし、stage済みの差分を読む。この順序を毎回固定すれば、作業ツリーが汚れていても安全な単位で変更を記録できます。
コミット対象を読む
git diff --cached --statで量を確認し、git diff --cachedでコミットに入る内容を読む。git diffは未stage差分なので代用しない。誤ってstageしたものはgit restore --staged path/to/fileで内容を残したまま戻せる。コミット後はgit show --stat --oneline HEADで記録を確認する。