- Git
would be overwritten by mergeの直し方|git
error: Your local changes to the following files would be overwritten by merge は、git pull(や git merge)で取り込もうとした変更と、まだコミットしていない自分の変更が、同じファイルにあるときのエラーです。 git は、自分の変更を消さないように、取り込みを止めています(Aborting)。この時点では、何も失われていません。
エラーは2種類あり、直し方が違います。
| エラー | 自分の手元の状態 | 直し方 |
|---|---|---|
Your local changes to the following files would be overwritten by merge |
管理しているファイルを、コミットせずに変更した | stash・commit・破棄のどれか |
The following untracked working tree files would be overwritten by merge |
git で管理していないファイルが、取り込む側で追加されるファイルと同じ名前 | ファイル名を変えて退避してから pull |
確認環境:git 2.43.0(確認日 2026年10月11日)。2つのクローンで、片方が app.conf を変えて push し、もう片方でコミットせずに app.conf を変えたまま pull して再現しました。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「would be overwritten by mergeの直し方|git」
再現
$ git pull origin main
error: Your local changes to the following files would be overwritten by merge:
app.conf
Please commit your changes or stash them before you merge.
Aborting
エラー文の下に並ぶファイル(app.conf)が、自分も相手も変更したファイルです。相手が変更していないファイル(ここでは README.md)だけを変えていた場合は、エラーにならず、自分の変更を残したまま pull できました。
| 操作 | メッセージ |
|---|---|
git pull・git merge |
would be overwritten by merge |
git checkout・git switch |
would be overwritten by checkout(ブランチの切り替え) |
git pull --rebase |
cannot pull with rebase: You have unstaged changes. |
git add しただけの変更 |
同じエラー(add だけでは、コミットしたことにならない) |
まず確認:自分の変更は何か
git status --short # 変更したファイルの一覧
git diff app.conf # 変更の中身
-v1
+v1-local
この変更を残したいかどうかで、直し方を選びます。
直し方の選び方
| 自分の変更 | 直し方 | コマンド |
|---|---|---|
| 残したい、まだ途中 | stash(一時的に退避) | git stash → git pull → git stash pop |
| 残したい、区切りがついた | commit | git commit -am "..." → git pull(重なればコンフリクトを直す) |
| 要らない(試しに変えただけ) | 破棄 | git diff で確かめてから git restore app.conf → git pull |
| 手早く1回で | --autostash |
git pull --autostash |
stash:退避して pull して戻す
git stash # 変更を退避(作業ツリーは元に戻る)
git pull origin main
git stash pop # 変更を戻す
git stash pop で、取り込んだ変更と自分の変更が同じ行に重なると、コンフリクトになります。
CONFLICT (content): Merge conflict in app.conf
The stash entry is kept in case you need it again.
<<<<<<< Updated upstream
v2
=======
v1-local
>>>>>>> Stashed changes
Updated upstream が取り込んだ側、Stashed changes が自分の変更です。ファイルを直して git add app.conf、最後に git stash drop で退避した内容を消します。コンフリクトのときは、stash は自動では消えずに残ります(git 公式ドキュメントでも同じ)。直す途中で失敗しても、git stash list に残っているので、やり直せます。
stash の使い方全体は、関連記事の「git stashの使い方|全コマンド実行結果つきで退避と復元を解説」で詳しく扱っています。
commit:コミットしてから pull
git commit -am "設定を変更"
git pull origin main
CONFLICT (content): Merge conflict in app.conf
Automatic merge failed; fix conflicts and then commit the result.
同じ行を変えていれば、ここでコンフリクトになります。コミットしたあとなので、自分の変更は履歴に残っており、失われる心配がありません。 直して git add・git commit します。
破棄:要らない変更を捨てる
git diff app.conf # 何を捨てるかを、先に必ず見る
git restore app.conf # 変更を捨てる(以前の書き方は git checkout -- app.conf)
git pull origin main
git restore で捨てた変更は、元に戻せません(コミットも stash もしていないため)。捨てる前に git diff で中身を確かめます。
git pull --autostash
git pull --autostash origin main
Created autostash: f98ecd8
Fast-forward
...
Applied autostash.
pull の前に自動で stash し、終わったら自動で戻します。 重ならない変更なら、Applied autostash. で1回で終わりました。
重なる変更では、取り込みは終わったあと、戻すところでコンフリクトになりました。
Applying autostash resulted in conflicts.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
このときも stash に残っているので、git stash のときと同じく、直して git add、最後に git stash drop です。
| 設定 | 動き |
|---|---|
git pull --autostash |
その1回だけ |
git config pull.rebase true + git config rebase.autoStash true |
rebase で pull するとき、毎回自動で stash(確認環境で Applied autostash.) |
untracked(管理していないファイル)のとき
error: The following untracked working tree files would be overwritten by merge:
notes.txt
Please move or remove them before you merge.
Aborting
自分が作った(まだ git add していない)notes.txt と同じ名前のファイルを、相手がコミットしていたケースです。--autostash では直りませんでした(管理していないファイルは、自動の stash の対象外)。
mv notes.txt notes.mine.txt # 名前を変えて退避
git pull origin main
diff notes.txt notes.mine.txt # 相手の版と自分の版を比べる
名前を変えて退避するのが一番安全です。比べてから、必要な内容を移し、要らないほうを消します。
stash -u で退避したとき
git stash -u(--include-untracked)で、管理していないファイルも一緒に退避できますが、pull で同じ名前のファイルが入ってくると、pop で戻せませんでした。
notes.txt already exists, no checkout
error: could not restore untracked files from stash
The stash entry is kept in case you need it again.
stash は残っているので、ファイルの中身は次のコマンドで取り出せました(確認環境)。
git show 'stash@{0}^3:notes.txt' > notes.mine.txt
確認の手順(チェックリスト)
| 順番 | 確認すること | 方法 |
|---|---|---|
| 1 | どちらのエラーか | Your local changes(変更)か untracked(管理外) |
| 2 | 自分の変更の中身 | git status --short、git diff ファイル |
| 3 | 残すか | 残すなら stash・commit、要らないなら git restore |
| 4 | untracked なら | 名前を変えて退避 → pull → 比べる |
| 5 | pop・autostash でコンフリクト | 直して git add → git stash drop |
| 6 | stash が残っているか | git stash list |
よくある質問
Q. git reset --hard で消してから pull してもよいですか。
A. 動きますが、コミットしていない変更はすべて消え、戻せません。消してよいか、git diff で確かめてからにします。誤って消したときに戻せる範囲は、関連記事の「git reset --hardを取り消す方法|reflogで復元する手順」で扱っています。
Q. ブランチを切り替えるときにも出ます。
A. would be overwritten by checkout は、切り替え先のブランチで、変更したファイルの内容が違うときのエラーです。直し方は同じで、stash・commit・破棄のどれかを選びます。
まとめ
- コミットしていない変更が、取り込む変更と重なるので、git が止めているエラー。この時点では何も失われていない
- まず
git diffで自分の変更を見る - 途中なら stash、区切りがついたら commit、要らないなら
git restore git pull --autostashで自動の退避と復元。重なるとコンフリクトになるが、stash に残る- untracked のエラーは、ファイル名を変えて退避。
--autostashでは直らない - pop・autostash でコンフリクトしたら、直して
git add、最後にgit stash drop
参考・出典
確認日はいずれも 2026年10月11日です。
- Git Documentation「git-pull」(--autostash):https://git-scm.com/docs/git-pull
- Git Documentation「git-stash」:https://git-scm.com/docs/git-stash
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「would be overwritten by mergeの直し方|git」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。