我该如何解决这个 Git 冲突?

6
我在foo.org上创建了一个中央裸共享仓库。用户A使用git clone ssh://foo.org/blah.git命令进行克隆。用户A创建了一个名为“lol”的空文件,将其提交到本地仓库并执行git push命令。用户B使用mkdir foocd foo命令创建目录,并使用git clone ssh://foo.org/blah.git命令进行克隆。用户B编辑了“lol”文件。用户A也编辑了“lol”文件,然后提交并使用git push命令推送到中央仓库。用户B提交并使用git push命令,但出现以下错误:

error: failed to push some refs to 'ssh://foo.org/blah.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'non-fast forward'

用户B使用git pull命令尝试解决问题,但出现以下错误:

From ssh://foo.org/home/meder/central/foo 08a0cda..fba6968 master -> origin/master Auto-merging lol CONFLICT (content): Merge conflict in lol Automatic merge failed; fix conflicts and then commit the result.

用户B使用vim lol编辑文件,然后尝试使用git commit命令,但出现以下错误:

lol: needs merge lol: unmerged (039727ec5a50d0ed45ff67e6f4c9b953bd23c17d) lol: unmerged (9307e337aa159ed6574eb84532f107685e46a16c) lol: unmerged (f88ad411f67850938dc369426cdbba76812e9126) error: Error building trees

此时,我应该怎么做?我尝试了git merge命令,但它显示“fatal: You have not concluded your merge. (MERGE_HEAD exists)”错误。请问我该如何解决这个问题?

可能是重复的问题:如何在Git中解决合并冲突? - bzlm
1个回答

1
在第11步,用户B在“git commit”之前是否执行了“git add”以添加他们的手动合并?

嗯,我其实认为你是对的。在手动合并时,我没有明确地执行 git add lol。那么 Git 是更改了分支还是取消了添加呢?或者说我一开始就没有添加它?困惑 - meder omuraliev
在“git commit”之前,您必须“git add”修改。 “git commit -a”也会为您添加。我知道这与添加新文件的命令相同;您也必须对合并执行相同的操作。 - Graham Perks
一种形象化的方式是,你需要将你的修改/变更“添加”到Git中。 - Graham Perks
我不明白为什么这应该是一条注释。这就是答案! - Graham Perks
@Graham:我认为你将这个问题表述成一个问题,这就是为什么你得到了那个评论的原因;请求更多信息应该是评论。你可能需要编辑它成一个陈述句(并解释一下)。不过,这确实是答案。 (+1) - Cascabel
@meder:git不会更改分支或取消添加内容。它发现了冲突,因此不知道要添加什么内容。它让用户解决冲突(您提到编辑文件),然后用户必须告诉git添加内容。是的,内容是新的- git不知道您将如何解决它。如果可以的话,它会为您解决!因此,您必须告诉git:在这里,将此内容暂存以进行提交。与您希望git了解的任何其他内容相同。 - Cascabel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接