Gitエラーの解決方法: Untracked working tree files would be overwritten by checkout

beginner📦 Git2026-07-12| Git バージョン 1.7.x 以降を実行しているすべての OS(Linux、macOS、Windows)。

Error Message

error: The following untracked working tree files would be overwritten by checkout
#git#checkout#untracked#バージョン管理#git-stash

Gitがブランチの切り替えをブロックする理由PRのレビューや最新のアップデートを取得するためにブランチを切り替えようとして、git checkout main を実行した際、成功メッセージの代わりに技術的なブロックによって停止させられることがあります。エラーは以下のように表示されます:

error: The following untracked working tree files would be overwritten by checkout:
    config/settings.local.php
    dist/bundle.js
Please move or remove them before you switch branches.
Aborting

このエラーは安全機能です。Gitはあなたのデータを保護しています。このエラーは、Gitがまだ追跡していないファイルがフォルダ内にある一方で、移動先のブランチに同じファイルパスが追跡対象として存在する場合に発生します。もしGitが切り替えを許可してしまうと、ローカルファイルがリポジトリのバージョンで上書きされ、ローカルでの作業内容が即座に削除されてしまいます。

まずは原因を特定するデータを削除する可能性のあるコマンドを実行する前に、これらのファイルが実際に何であるかを確認してください。dist/bundle.js のような50MBのビルド成果物でしょうか、それとも1時間かけて調整した1KBの構成ファイルでしょうか?git status を実行して全リストを確認します。

git status

エラーメッセージにリストされているファイルが「Untracked files」の下に表示されている場合は、そのデータの重要度に応じて、次の4つの方法のいずれかを選択してください。

解決策1:手動バックアップ(最も安全)機密性の高いAPIキーや、まだコミットしていないコードが含まれている場合は、ファイルを移動してください。ファイルが不要かどうか100%確信が持てない場合は、この方法が最適です。安全を確保するために数秒しかかかりません。

# リポジトリの外に一時的なバックアップフォルダを作成する
mkdir ../git_backup

# 競合しているファイルを移動する
mv config/settings.local.php ../git_backup/

# ブランチを切り替える
git checkout destination-branch

切り替え後、バックアップしたバージョンとGitがプルしたバージョンを手動で比較できます。

解決策2:Git Clean を使用する(ビルド時のゴミに最適)競合がビルド成果物、ログファイル、または node_modules の残骸から発生している場合があります。これらのファイルが不要な場合は、git clean を使用して一掃します。注意: この操作は永続的であり、元に戻すことはできません。

削除される内容を確認するために、必ず最初に「ドライラン」を実行してください:

git clean -n

リストが安全そうであれば、強制(force)フラグとディレクトリ(directory)フラグを付けてコマンドを実行します:

# -f は強制、-d はディレクトリの削除
git clean -fd

ワーキングツリーがクリアになれば、すぐに git checkout が機能するようになります。

解決策3:強制的な切り替えすぐにブランチを切りたいたく、未追跡ファイルを失っても構わない場合は、強制フラグを使用します。これにより、Gitはローカルファイルよりもリポジトリのバージョンを優先します。

git checkout -f destination-branch

警告: Gitはローカルの未追跡ファイルを上書きします。Gitはこれらのファイルを一度も追跡していないため、後で気が変わっても復元するための履歴は存在しません。

解決策4:追跡してスタッシュ(プロフェッショナルな方法)これらのファイルは最初からリポジトリの一部であるべきだったと気づくかもしれません。その場合は、ファイルを追跡対象にし、一時的にスタッシュに隠してからブランチを移動します。これにより、作業履歴をきれいに保つことができます。

# 1. ファイルをステージングする
git add config/settings.local.php

# 2. 安全にスタッシュする
git stash

# 3. ブランチを切り替える
git checkout destination-branch

# 4. (任意)変更を元に戻す
git stash pop

stash pop を使用し、対象ブランチの同じファイルに異なる内容がある場合、Gitは標準的なマージ競合を発生させます。どの行を残すかを選択できるため、強制的な上書きよりもはるかに安全です。

今後の発生を防ぐ方法- .gitignore を監査する: このエラーは通常、dist/.env のように追跡すべきではないファイルに起因します。これらが .gitignore ファイルに記載されており、Gitが完全に無視するようになっているか確認してください。- 常に整理しておく: 頻繁に git status を実行しましょう。放置されている未追跡ファイルが少ないほど、パスの衝突が発生する可能性は低くなります。- チームと連携する: 複数の開発者が異なるブランチで同じパスに新しいファイルを追加している場合は、これらの競合を避けるために標準的なフォルダ構造について連携してください。

Related Error Notes