当我试图在终端中拉入我的项目目录时,我看到以下错误:

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'.

为什么git说“拉是不可能的,因为你有未合并的文件”,我该如何解决它?


当前回答

如果你不想合并这些变化,并且仍然想要更新你的本地,那么运行:

git reset --hard HEAD  

这将重置您的本地与HEAD,然后拉动您的远程使用git拉。

如果你已经在本地提交了你的合并(但还没有推送到远程),并且想要还原它:

git reset --hard HEAD~1 

其他回答

如果你不想合并这些变化,并且仍然想要更新你的本地,那么运行:

git reset --hard HEAD  

这将重置您的本地与HEAD,然后拉动您的远程使用git拉。

如果你已经在本地提交了你的合并(但还没有推送到远程),并且想要还原它:

git reset --hard HEAD~1 

您在本地有一些文件需要合并,然后才能进行提取。您可以签出这些文件,然后拖动以覆盖本地文件。

git checkout app/config/app.php app/config/database.php app/routes.php
git pull origin master

如果你想下拉一个远程分支到本地运行(比如为了检查或测试),当你$ git下拉时,你会得到本地合并冲突:

$ git checkout REMOTE-BRANCH
$ git pull  (you get local merge conflicts)
$ git reset --hard HEAD (discards local conflicts, and resets to remote branch HEAD)
$ git pull (now get remote branch updates without local conflicts)

只需执行以下命令:

git reset --hard

目前发生的情况是,您有一组特定的文件,您之前已经尝试合并这些文件,但它们引发了合并冲突。 理想情况下,如果有人遇到合并冲突,他们应该手动解决,并使用git add file.name && git commit -m "removed merge conflicts"提交修改。 现在,另一个用户已经在他们的存储库中更新了有问题的文件,并将其更改推到公共上游回购。

碰巧的是,上次提交的合并冲突(可能)没有解决,所以文件没有合并,因此文件有U(未合并)标志。 当你进行git pull时,git会抛出错误,因为你有某个版本的文件,没有被正确解析。

要解决这个问题,您必须解决合并冲突,并在进行git拉取之前添加并提交更改。

样本再现和解决问题:

# 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拉取,它将抛出冲突

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

然后我们再来一次,我们得到

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'.

请注意,文件现在处于未合并状态,如果我们执行git状态,我们可以清楚地看到相同的情况:

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