Git 在无法正确解决冲突后,是否可以恢复文件的冲突?

Git 在无法正确解决冲突后,是否可以恢复文件的冲突?,git,conflict,resolve,Git,Conflict,Resolve,假设我做了一个重基,100个文件有冲突。我必须一个接一个地解决它们。假设我已经解析了(N-1)个文件,我正在处理文件N。在处理了一段时间后,我发现我把文件搞砸了。所以我想重新解决这个问题。但我不想中止重新基址并再次进行重新基址,因为我不想再次解析(N-1)文件 是否可以恢复文件N的合并冲突,以便我可以从头开始重新解决它?可能不是一个很好的解决方案(看起来不太像git'ish),但这里有一种可能的方法: 将(N-1)个文件复制到临时目录 git rebase—中止 将(N-1)文件复制回git目录

假设我做了一个重基,100个文件有冲突。我必须一个接一个地解决它们。假设我已经解析了(N-1)个文件,我正在处理文件N。在处理了一段时间后,我发现我把文件搞砸了。所以我想重新解决这个问题。但我不想中止重新基址并再次进行重新基址,因为我不想再次解析(N-1)文件


是否可以恢复文件N的合并冲突,以便我可以从头开始重新解决它?

可能不是一个很好的解决方案(看起来不太像git'ish),但这里有一种可能的方法:

  • 将(N-1)个文件复制到临时目录
  • git rebase—中止
  • 将(N-1)文件复制回git目录
  • 处理第n个文件

  • 假设您正在处理的文件名为
    test.txt
    ,并且由于合并尝试,该文件已留下冲突标记,并且您在手动解决这些冲突时遇到了一些问题,那么您可以使用一些命令重新创建带有冲突标记的文件

    作为背景,它有助于了解,当合并需要手动解决文件冲突时,它会在
    git
    索引中保留该文件的三个不同副本(称为“阶段”)。阶段1是合并文件的两个版本的共同祖先,阶段2和阶段3是您尝试合并的两个分支的两个版本。一些但不是全部的
    git
    实用程序理解引用这些条目的语法

    因此,您首先需要做的是在某处重新创建这三个文件的临时副本-我将在这里使用
    /tmp
    ,但这不是强制性的:

    git cat-file -p :1:test.txt > /tmp/test.txt.1
    git cat-file -p :2:test.txt > /tmp/test.txt.2
    git cat-file -p :3:test.txt > /tmp/test.txt.3
    
    然后,使用
    git
    管道命令
    git merge file
    使用适当的冲突标记重新创建文件。请注意,参数的顺序在这里很重要,如果您想在重新进行合并时引用该文件,那么最好保存您对该文件所做的工作

    mv test.txt test.txt.broken
    git merge-file -p /tmp/test.txt.2 /tmp/test.txt.1 /tmp/test.txt.3 > test.txt
    
    这将使用冲突标记重新创建
    test.txt
    (尽管没有通常包含的分支名称注释-如果您确实需要这些注释,您需要添加一些
    -L
    参数-您可以键入
    git help merge file
    以获取更多信息)


    此时,您可以清理临时文件,并重新开始解决该文件中的冲突。记得在完成后添加git,然后继续处理剩下的文件。

    我相信你正在寻找git签出-合并--

    你是在使用git合并工具还是在手工解析?不管你用什么,总是有可能弄乱一个文件。通常我是手工做的,需要O(N)。似乎太贵了:)谢谢你详细的回答。如果有N个文件,我需要保存3N个文件。这太贵了。但我有一个基于您的解决方案的想法。只对混乱的文件执行此操作:git show:1:test.txt>/tmp/test.txt.1 git show:2:test.txt>/tmp/test.txt.2 git show:3:test.txt>/tmp/test.txt.3 git合并文件-p/tmp/test.txt.2/tmp/test.txt.1/tmp/test.txt.3>test.txtYes,这就是我的意思-只对你当前所使用的文件执行此操作。当然,如果您被另一个文件卡住了,您可以稍后重复。。。您已经处理的前N个文件,以及希望其余的文件,您应该能够“正常”处理,不管这意味着什么……不。Git checkout——merge对本地更改执行三方合并。这不是我想要的。谢谢。“从索引中签出路径时,此选项允许您在指定路径中重新创建冲突合并。”