← エラー辞典に戻る

環境構築

error: Your local changes would be overwritten by checkout / merge

コミットしていない変更が消えるのをGitが防いでいる

こんな症状

ブランチ切り替えやgit pullで「Your local changes would be overwritten」と止められる。これはエラーというより、コミットしていない変更が消えるのをGitが守ってくれている状態だよ。

まず試す

変更を残すなら git stash → 操作 → git stash pop。区切りが良ければ git commit してから操作する。

env
# 変更を残してpull(一時退避)
git stash
git pull origin main
git stash pop

これで直らなければ、下の「自分のケース」を確認。

🔍 自分のケースはどれ?

  • ブランチ切り替えで止められた(by checkout)
    → git stash で退避して切り替え、git stash pop で戻す。
  • git pull で止められた(by merge)
    → git stash で退避してpull、または git commit してからpull。
  • その変更はもう要らない
    → git restore ファイル名(全部なら git restore .)で捨てる。※戻せないので注意。

なぜ起きる?

コミットしていない変更があるファイルを、操作で上書きしそうになっているよ。「by checkout」ならブランチ切り替え時、「by merge」ならgit pullやmerge時に出るんだ。どちらも意味は同じで、「今の作業中の変更をどうするか決めてから操作してね」というGitからの確認だよ。チーム開発でgit pullしたら止められた、というのが定番のパターン。

✕ エラーが起きるコード
git pull origin main
# error: Your local changes to the following files would be overwritten by merge:
#   index.html
# Please commit your changes or stash them before you merge.
✓ 直したコード
# 方法1: 一時退避してからpull(変更を残したいとき)
git stash
git pull origin main
git stash pop  # 退避した変更を復元

# 方法2: コミットしてからpull
git add .
git commit -m "作業中の変更を保存"
git pull origin main

✅ 直ったか確認

操作(切り替え/pull)が完了し、必要なら git stash pop で変更が戻っていればOK。

🆘 まだ直らないときは

git stash list で退避した変更を確認できる。pop で競合が出たら手動で解消しよう。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

📖 この問題を学べるレッスン

Gitレッスン6:コンフリクト解消で根本から理解する →

✏️ 手を動かして練習

このテーマの図解ドリルで実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 Gitレッスン6:コンフリクト解消で根本解決しよう!

このエラーの背景にある仕組みを、手を動かしながら学べるレッスンがあります。完全無料・登録不要。

Gitレッスン6:コンフリクト解消へ →

❓ 関連するQ&A