git pull した時に以下のようなエラーで conflict が発生した場合の対処をまとめる

error: Your local changes to the following files would be overwritten by merge:
    Directory/File
Please, commit your changes or stash them before you can merge.

1. stash でワーキングツリーの内容を退避

コンフリクトを起こしているワーキングツリーの内容を git stash で退避する。

1
$ git stash

stash で退避した内容を確認する。

1
$ git stash list

この状態で pull すると成功する。

1
$ git pull origin main

退避した内容を git stash pop で戻す。

1
$ git stash pop

pull で取り込んだ内容とコンフリクトしている箇所は, git status で確認できる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
        both modified:   ***

no changes added to commit (use "git add" and/or "git commit -a")

コンフリクトした箇所にはこんな感じで変更前と変更後が表示されるので修正する。

<<<<<<< Updated upstream
xxxxx
=======
xxxxx
>>>>>>> Stashed changes

修正したら git add, git commit, git push する。

2. 強制マージ (リモートリポジトリの状態にする)

  1. リモートリポジトリの最新をリモート追跡ブランチ (origin/main) に取り込む。
1
$ git fetch origin main
  1. ワーキングディレクトリをリモート追跡ブランチ (origin/main) に強制的に変更する
1
$ git reset --hard origin/main

参考

git-resetは結局何を戻すのか

git reset 解説

Git のさまざまなツール - リセットコマンド詳説