有两种方法可以使git合并(或者git pull,这是一个git fetch,然后是一个git合并)可能会失败:
发生这种情况是因为git知道您的工作目录或登台区域中有可能由您正在合并的文件写入的更改。如果发生这种情况,那么在单个文件中不存在合并冲突。你需要修改或存储它列出的文件,然后再尝试做一个git pull。错误消息如下所示:
错误:条目'<文件名>'不是uptodate。无法合并。(工作目录中的更改)
要么
错误:条目'<文件名>'将被合并覆盖。无法合并。(中转区域的变化)
发生这种情况是因为您提交的更改与其他人提交的更改相冲突。Git将尽最大努力合并这些文件,并且会让您在所列出的文件中手动解析。错误消息如下所示:
CONFLICT(内容):合并中的冲突 自动合并失败; 修复冲突,然后提交结果。
如果你的合并失败,甚至没有启动,文件将不会有冲突。如果git在合并过程中发现冲突,它会列出错误信息后所有冲突的文件。您也可以通过执行'git status'来检查哪些文件已经合并冲突。
例:
#要提交的更改: #(使用“git reset HEAD...”来取消) # #修改:<某些文件> # #已更改但未更新: #(使用“git add...”来更新将要提交的内容) #(使用“git checkout -...”放弃工作目录中的更改) # #unmerged:#
“要提交的更改”:对不受冲突影响的文件的所有提交的更改都将被暂存。
“已更改但未更新...已取消合并”:在存储库恢复到正常工作状态之前必须解决的所有冲突文件。
冲突在带有清晰换行符的文件中标记:
<<<<<<< HEAD:mergetest 这是我的第三行 ======= 这是我添加的第四行 >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest
<<<<<<<:表示有合并冲突的行的开始。第一组行是您试图合并更改到文件的行。
=======:表示用于比较的断点。将用户提交的更改(以上)分解为来自合并(下面)的更改,以直观地查看差异。
>>>>>>>:表示有合并冲突的行结束。
通过编辑文件来手动合并git合并时遇到的文件部分,从而解决冲突。这可能意味着放弃你的改变或者别人的或者两者的混合。您还需要删除文件中的“<<<<<<<”,“=======”和“>>>>>>>”。
git添加文件,git commit和git push(只为追踪的分支推送)。
(注意中国增加 - 需要提交一切,而不仅仅是已解决的冲突文件。)
下面的下面的git工具可以帮助你解决简单和更复杂的git合并。
git diff:帮助查找版本库/文件状态之间差异的命令。有助于预测和防止合并冲突。
git diff origin / master
diff --git a / mergetest b / mergetest 索引9be56b9..0aeffac 100644 ---一个/ mergetest +++ b / mergetest @@ -1,3 +1,4 @@ 你好 +我也在编辑这一行 这是一个测试 这是我的第三行 +这是我添加的第四行
来自origin / master的更改用+标记,而本地存储库(HEAD)中的更改用-标记。此语法不会通知哪些行被添加被删除,而是哪些行来源于文件的哪个状态。
git diff FETCH_HEAD <文件名>:将提供与上述相同的输出,但仅限于用户所做的最后一次读取的索引。这可能不是中央存储库中的最新版本。
git status:一个命令提供了所有在合并时被修改和冲突的文件的概述。
例:
#要提交的更改: #(使用“git reset HEAD...”来取消) # #修改:<某些文件> # #已更改但未更新: #(使用“git add...”来更新将要提交的内容) #(使用“git checkout -...”放弃工作目录中的更改) # #unmerged:#
重要提示:如果git经历了合并,并且存在合并冲突,请勿使用git stash!如果git拒绝合并,只能使用git存储,因为它预见到存在冲突。
git stash:存放你的临时区域和工作目录中的任何改变。这个命令在保存所有没有准备好提交的变化并且用户希望有一个更新的存储库时非常有用。
git储存保存“<保存消息>”:保存更改文件在工作目录和临时区域git知道
git存储保存“存储示例的更改” 已保存的工作目录和索引状态“在主服务器上:保存更改为隐藏示例” HEAD现在在4e2b407例如添加第二个文件。
git stash pop:删除指定的最新隐藏或任何隐藏,并将更改作为合并应用。如果合并失败,存储不会从列表中删除,必须手动删除。
git checkout
git reset --mixed:可以用来取消文件以允许 git pull。
git reset --hard:重置版本库以退出合并冲突的情况。git reset,特别是用--hard选项可以用来退出合并冲突(点击这里获取更多信息)。
重要:在解决合并过程中git失败的情况下,不要使用除-hard之外的其他任何选项来重置,因为它们将在文件中留下冲突线标记,并且最终可能会提交冲突标记仍然存在的文件。
错误消息:
错误:条目'<文件名>'不是uptodate。无法合并。(工作目录中的更改)
错误:条目'<文件名>'将被合并覆盖。无法合并。(变化上演,但没有承诺)
解决方案的步骤:
错误信息:
CONFLICT(内容):合并中的冲突 自动合并失败; 修复冲突,然后提交结果。
解决方案的步骤:
您可以尝试解决与此存储库的git冲突:https://github.com/brianleetest/testGit/blob/master/README.md