如何从git中覆盖合并文件中恢复?

如何从git中覆盖合并文件中恢复?,git,git-merge,Git,Git Merge,我只是在我的git repo(Dayquil’d时愚蠢的编程)上犯了一个错误。我的步骤是: 开始编辑file.txt文件 对包含file.txt的repo进行了“git pull”。File.txt是合并冲突的一部分 对我在步骤1中打开的file.txt版本进行了一些编辑 保存了我在步骤1中打开的文件,覆盖了合并 我需要解析第2步中的合并,然后将结果与第2步中所做的编辑合并。我怎样才能做到这一点?听起来您的问题很简单,就是您重写了文件并丢失了合并冲突标记。处理此问题的最简单方法是使用git m

我只是在我的git repo(Dayquil’d时愚蠢的编程)上犯了一个错误。我的步骤是:

  • 开始编辑file.txt文件
  • 对包含file.txt的repo进行了“git pull”。File.txt是合并冲突的一部分
  • 对我在步骤1中打开的file.txt版本进行了一些编辑
  • 保存了我在步骤1中打开的文件,覆盖了合并

  • 我需要解析第2步中的合并,然后将结果与第2步中所做的编辑合并。我怎样才能做到这一点?

    听起来您的问题很简单,就是您重写了文件并丢失了合并冲突标记。处理此问题的最简单方法是使用
    git mergetool
    ,它将使用GUI合并工具来处理冲突。此工具不依赖于带有冲突标记的文件的工作副本版本,它实际上使用您选择的GUI工具重新合并原始文件。我强烈推荐它作为合并冲突的正常解决方案

    如果您真的想用冲突标记返回文件,您可以使用
    git checkout-m--file.txt
    。这将重新创建文件的合并冲突版本。请注意,您在步骤3和4中所做的任何更改都将丢失


    如果要保存所做的本地更改,可以使用
    git diff:2:file.txt file.txt
    查看file.txt的预合并副本与保存到磁盘的副本之间的差异。您可以通过管道将其传输到一个文件,以便在解决合并后使用它来重新创建更改,甚至可以对文件使用
    git apply
    将其作为修补程序应用(只要它不触及合并更改的任何大块)。

    听起来您的问题只是过度编写了文件并丢失了合并冲突标记。处理此问题的最简单方法是使用
    git mergetool
    ,它将使用GUI合并工具来处理冲突。此工具不依赖于带有冲突标记的文件的工作副本版本,它实际上使用您选择的GUI工具重新合并原始文件。我强烈推荐它作为合并冲突的正常解决方案

    如果您真的想用冲突标记返回文件,您可以使用
    git checkout-m--file.txt
    。这将重新创建文件的合并冲突版本。请注意,您在步骤3和4中所做的任何更改都将丢失

    如果要保存所做的本地更改,可以使用
    git diff:2:file.txt file.txt
    查看file.txt的预合并副本与保存到磁盘的副本之间的差异。您可以通过管道将其传输到一个文件,以便在解决合并后使用它来重新创建更改,或者甚至对文件使用
    git apply
    将其作为补丁应用(只要它不触及合并更改的任何大块)。

    尝试执行以下操作:

    git checkout --merge -- file.txt
    
    试着做:

    git checkout --merge -- file.txt
    

    文件中还有合并块吗?你完成过合并吗?@jcm,不,我没有,如果说合并块,你的意思是@AndrewMarshall,不——我拉了,没有意识到我需要合并,然后保存在合并中。文件中还有合并块吗?你完成过合并吗?@jcm,不,我没有,如果是通过合并块,你是说@AndrewMarshall,不——我拉了,没有意识到我需要合并,然后在合并过程中保存了。@KevinBallard——favoretti的隐藏想法有助于保持第3步和第4步的更改吗?@mmr:可能没有。如果您在当前状态下运行它,我不太确定git stash会做什么,因为我不确定git diff--file.txt在当前状态下实际会打印什么。您可以尝试类似于
    git diff:2:file.txt file.txt
    ,这可能会使您的file.txt的早期版本(合并之前)与保存到磁盘的当前版本之间存在差异,但如果不进行测试,我无法确定(而且我手头没有可以测试的合并冲突)。如果它真的有效,你可以将它通过管道传输到一个文件中保存。@mmr:是的,
    git stash
    将在你当前的状态下出错
    git diff
    将打印冲突样式的diff,这非常容易混淆。但是,
    git diff:2:file.txt file.txt
    将准确打印您想要的内容,这就是您所做的更改。@KevinBallard--这听起来可能有点疯狂(即,quil talking)--但是如何恢复到头部的内容,但将我当前打开的工作保存到另一个文件中呢。然后,我创建一个分支,然后将另一个文件中的编辑保存到同一个file.txt文件中。然后,我应该能够合并分支,对吗?@KevinBallard——git diff选择了文本文件部分的错误版本,这没有帮助;这是说我最近的编辑是正确的,因为他们是最近的。嘎。@KevinBallard——favoretti的隐藏想法有助于保持第3步和第4步的变化吗?@mmr:可能没有。如果您在当前状态下运行它,我不太确定git stash会做什么,因为我不确定git diff--file.txt在当前状态下实际会打印什么。您可以尝试类似于
    git diff:2:file.txt file.txt
    ,这可能会使您的file.txt的早期版本(合并之前)与保存到磁盘的当前版本之间存在差异,但如果不进行测试,我无法确定(而且我手头没有可以测试的合并冲突)。如果它真的有效,你可以将它通过管道传输到一个文件中保存。@mmr:是的,
    git stash
    将在你当前的状态下出错
    git diff
    将打印冲突样式的diff,这非常容易混淆。但是,
    git diff:2:file.txt file.txt
    将准确打印您想要的内容,这就是您所做的更改。@KevinBallard--这听起来可能有点疯狂(即,quil talking)--但是如何恢复到头部的内容,但将我当前打开的工作保存到另一个文件中呢。然后,我创建一个分支,然后将另一个文件中的编辑保存到