1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】gitが「Pull is not possible because you have unmerged files」と言うのはなぜですか?

2022-01-10 02:11:44

質問内容

私は自分のプロジェクトを引っ張りたいのですが、コマンドは次のとおりです。

harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

しかし、エラーが発生します。

"Pull is not possible because you have unmerged files"

解決方法は?

現在起きていることは、あるファイル群があり、以前にマージを試みたが、マージの競合が発生したことです。理想的には、もしマージの衝突が起きたら、それを手動で解決し、変更をコミットするには git add file.name && git commit -m "removed merge conflicts" . さて、他のユーザーが自分のリポジトリで問題のファイルを更新し、その変更を共通のアップストリームリポジトリにプッシュしました。

たまたま、(おそらく) 前回のコミットでのマージの競合が解決されていなかったため、ファイルが正しくマージされず、その結果 U ( unmerged )フラグをファイルに設定します。ですから、今、あなたが git pull これは、ファイルのバージョンが正しく解決されていないためです。

これを解決するには、問題のマージの競合を解決し、変更を追加してコミットする前に git pull .

問題の再現例と解決方法。

# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test

まず、リポジトリの構造を作成します。

test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone

今、私たちはrepo_cloneで、もしあなたが git pull コンフリクトを発生させる

repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
 * branch            master     -> FETCH_HEAD
   24d5b2e..1a1aa70  master     -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.

クローンでのコンフリクトを無視して、元のレポで今より多くのコミットを行った場合。

repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone

そして、その後に git pull となります。

repo_clone $ git pull
U   file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

ただし file はマージされていない状態であり、もし git status ということです。

repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:      file

そこで、これを解決するために、まず、先ほど無視したマージの競合を解決する必要があります。

repo_clone $ vi file

に設定し、その内容を

text2
text1
text1

を追加し、変更をコミットします。

repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts