テクノロジー · 実用ガイド
Gitで未追跡ファイルがマージで上書きされるなら、まず保存して分類する
この拒否は安全境界です。表示パスをコピーし、受信側の追跡状態とローカルの無視設定を確認してから、限定的削除より可逆的な移動やstashを選びます。

受信側で追跡されるパスがローカルパスを上書きする場合、Gitはmerge、pull、checkoutを止めます。この拒否はバイトを守るもので、ローカルファイルが不要だとも、万能コマンドが安全だとも示しません。
エラーの各パスについて証拠台帳を作り、作業ツリー外に元のバイトを保存し、現在と受信側の正体を分類してから、移動、stash、追跡追加、限定的cleanを選びます。
1. 操作を止めてパスを保存する
reset、checkout、clean、pull、再mergeの前にエラー全文とパス一覧をコピーします。git status --short --untracked-files=all、現在のブランチとHEAD、失敗コマンド、統合対象も記録します。
各パスを作業ツリー外へコピーし、重要ファイルはモードとチェックサムも記録します。ネストした.git、秘密、生成物、ローカル設定、代替不能な作業を確認します。
2. ローカル状態と受信側所有を証明する
リポジトリ最上位でgit ls-files --error-unmatch、--others --exclude-standard、さらに--ignoredを使い、追跡・未追跡・無視を区別します。git check-ignore -vは規則の出所を示します。
fetch後、git ls-tree -r --name-only <target> -- pathで対象コミットの所有を確認します。ファイル/ディレクトリ、大小文字、sparse checkout、submodule、ネストしたリポジトリは別の境界です。
3. 可逆的な保存経路を選ぶ
ローカル専用の価値あるパスは作業ツリー外へ移し、受信側ファイルを配置してから調整します。追跡すべきなら所有者と秘密を確認して適切なブランチでcommitし、エラーを消すだけの一時commitは避けます。
通常のgit stashは未追跡を保証しません。--include-untrackedは未追跡を、--allはignoredも保存して作業ツリーから除きます。内容を確認し、復元確認まではpopよりapplyを使います。
4. 破棄可能と証明したパスだけcleanする
git clean -nと正確なpathspecで候補を読みます。-dは未追跡ディレクトリ、-xはignoredも含め、-Xはignoredだけを削除します。範囲が違うため交換できません。
forceやネストしたリポジトリの保護はデータ分類ではありません。dry-runが見慣れているだけでgit clean -fdxへ進まず、価値あるバイトを先に保存します。
5. 元の統合を再試行して境界を検証する
衝突名を移動、stash、または意図的に除去したら、元のmerge、pull、checkoutを一度再実行します。期待commitを確認し、ローカル内容を一つずつ戻し、検査完了までバックアップを消しません。
Git 2.39.2の隔離フィクスチャでは同じパスの未追跡と受信側追跡が衝突し、mergeは停止してチェックサムは不変でした。sparse checkout、大小文字、submodule、Git LFS、IDE、CI、秘密管理は未再現です。
