環境構築
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。
この解決法は役立ちましたか?
🔗 関連するエラー
- refusing to merge unrelated histories — 関連のない履歴をマージしようとしている
- error: pathspec '...' did not match any file(s) known to git — 指定したファイル・ブランチが見つからない
- Your branch is behind — リモートに新しいコミットがある
- HEAD detached at — HEADが切り離された状態(detached HEAD)
- error: failed to push some refs — pushが拒否された
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- VS Codeのインストール方法 — インストールと初期設定を図解で解説
- プログラミング初心者が最初にやるべきこと5選 — 目的を決めて環境構築から