【问题标题】:How does merging conflicts in Git compare to merging conflicts in Subversion?Git 中的合并冲突与 Subversion 中的合并冲突有何不同?
【发布时间】:2012-12-08 08:12:15
【问题描述】:

当我在 Subversion 中工作时,我总是在 svn commit 之前输入 svn update。如果有任何冲突,我会在更新时收到警告。然后,在我的工作目录中,我得到filename.javafilename.java.minefilename.java.r10filename.java.r13。根据这些文件,我想出了如何解决冲突,将其标记为已解决,然后提交。

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

【问题讨论】:

    标签: git svn merge conflict


    【解决方案1】:

    有许多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 样式的冲突标记,则缺少 | 分隔符和共同的祖先行。

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

    【讨论】:

    • 酷,我不知道 diff3 设置。那么这个文件会覆盖我工作目录中的文件吗?我未提交的更改会怎样?
    • IIRC,当您有未提交的更改时,您不允许合并。您必须先存储第一个,然后再合并。
    • @jszakmeister 这并非完全正确。如果您有未提交的更改与任何合并材料不冲突,它将成功。我认为与未提交更改的冲突会导致合并失败...
    • 这似乎暗示我应该在git merge 之前提交或存储我的更改。对吗?
    • @mkasberg 除非您确定所做的更改不会与合并冲突,否则无论是存储还是创建一个临时分支并在那里提交(无论如何,这与 stash 所做的非常接近) 可能是个好主意。
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多