2012-12-20 113 views
3

当我在Subversion工作时,我总是在svn commit之前执行svn update。如果有任何冲突,我会在更新时发出警告。然后,在我的工作目录中,我得到了filename.java,filename.java.mine,filename.java.r10filename.java.r13。基于这些文件,我计算出如何解决冲突,将其标记为已解决并提交。在Git中如何合并冲突与在Subversion中合并冲突?

我对Git比较陌生,所以我想弄清楚上面的工作流程对于git来说是什么。什么git命令可能会导致合并冲突?上面的文件是否会显示在我的工作目录中?

回答

2

有许多的git子命令,可以导致合并冲突,包括merge(和pull,因为它本质上是fetch其次merge),cherry-pickrebase等。尽管如此,git以一种根本不同的方式处理合并冲突。它不是为不同版本创建单个文件,而是创建一个文件,其中包含用分隔符标记的部分,以指示它们来自哪个三方合并等式的哪一部分。因此,您编辑冲突的文件,并删除不需要的部分和分隔符,或者如果双方都不正确,请用适当的手动合并混合替换它,然后使用git addgit commit。分隔符是7 <=,并且>序列(有时|,如果你有diff3格式配置),看起来像这样的字符:

<<<<<<< 
stuff from your version of the file 
||||||| 
stuff from the common ancestor of the two 
======= 
stuff from the version you're merging in 
>>>>>>> 

如果你不使用diff3 -styled冲突标记,|分隔符和共同的祖先线缺失。

您可以输入git help merge以了解更多信息。

+0

很酷,我不知道diff3的设置。那么这个文件是否会覆盖我的工作目录中的文件?我的未提交更改会发生什么? – mkasberg

+0

IIRC,当您有未提交的更改时,您不允许合并。你必须存储第一个,然后合并。 – jszakmeister

+0

@jszakmeister这不是真的。如果您有未与任何合并材料相冲突的未提交更改,它将会成功。我认为与未提交的更改冲突将导致合并失败,但... – twalberg