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

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拒绝进行拉取。考虑下面的图表,以更好地可视化该场景:

remote: A <- B <- C <- D local: A <- B* (*表示您有几个已修改但未提交的文件。)

处理这种情况有两种选择。您可以丢弃文件中的更改,也可以保留它们。

选择一:抛弃这些更改 你可以对每个未合并的文件使用git签出,也可以使用git reset—hard HEAD将分支中的所有文件重置为HEAD。顺便说一下,你们当地分行的HEAD是B,不带星号。如果选择此选项,图表将变成:

remote: A <- B <- C <- D local: A <- B

现在,当您拖动时,您可以用来自master的更改快进您的分支。拉完之后,你的树枝看起来就像主人一样:

local: A <- B <- C <- D

选项二:保留更改 如果希望保留更改,首先需要解决每个文件中的合并冲突。您可以在IDE中打开每个文件并查找以下符号:

< < < < < < <头 //你的代码版本 = = = = = = = //远程版本的代码 >>>>>>>

Git为您提供了两个版本的代码。HEAD标记中包含的代码是来自当前本地分支的版本。另一个版本是来自遥控器的东西。一旦你选择了一个版本的代码(并删除了其他代码和标记),你可以通过输入git add将每个文件添加到你的staging区域。最后一步是通过输入git commit -m和适当的消息来提交你的结果。此时,我们的图表看起来是这样的:

remote: A <- B <- C <- D local: A <- B <- C'

这里我把我们刚刚做的提交标记为C',因为它与远程上的提交C不同。现在,如果你尝试拉,你会得到一个非快进错误。Git不能在你的分支上播放远程中的更改,因为你的分支和远程都已经从共同的祖先提交b中分离出来了。在这一点上,如果你想拉,你可以再做一次Git合并,或者Git在远程上重新创建你的分支。

掌握Git需要能够理解和操作单向链表。我希望这个解释能引导您正确地思考如何使用Git。

其他回答

我也有同样的问题 在我的案例中,步骤如下-

删除了所有以U(未合并)符号开始的文件。作为- - - - - -


U   project/app/pages/file1/file.ts
U   project/www/assets/file1/file-name.html

从master中提取代码


$ git pull origin master

检查状态


 $ git status

这是它出现的消息 分别有2个和1个不同的提交。 (使用“git pull”将远程分支合并到您的分支中) 你有未合并的路径。 (修复冲突并运行“git commit”)

Unmerged路径: (使用“git add…”来标记分辨率)

both modified:   project/app/pages/file1/file.ts
both modified:   project/www/assets/file1/file-name.html

增加了所有新的变化-


    $ git add project/app/pages/file1/file.ts
project/www/assets/file1/file-name.html

在head上提交更改


$ git commit -am "resolved conflict of the app."

〇推送密码


$ git push origin master

用这个图像可以解决哪一个问题

当合并发生冲突时,您可以打开单个文件。你会得到 “<<<<<<<或>>>>>>>”符号。这些是指您的更改和远程显示的更改。 您可以手动编辑所需的部分。 之后,保存文件,然后做: git添加

合并冲突将得到解决。

有一个简单的解决办法。但要做到这一点,你首先需要学习以下内容

vimdiff

为了消除冲突,您可以使用

git mergetool

上面的命令基本上为每个冲突文件打开本地文件、混合文件、远程文件(总共3个文件)。本地和远程文件只是供您参考,使用它们您可以选择在混合文件中包含(或不包含)什么。然后保存并退出文件。

如果你不想让你的本地分支发生任何变化,我认为这是最好的方法

git clean -df
git reset --hard
git checkout REMOTE_BRANCH_NAME
git pull origin REMOTE_BRANCH_NAME

以下步骤:

step-1 : git reset --hard HEAD  (if you want to reset it to head)
step-2 : git checkout Master 
step-3 : git branch -D <branch Name>
(Remote Branch name where you want to get pull) 
step-4 : git checkout <branch name>
step-5 : git pull. (now you will not get any
error)

谢谢, Sarbasish