2011-11-30 73 views
0

我刚刚在我的git repo中犯了一个错误(愚蠢的编程,而Dayquil'd)。我的步骤是:如何恢复覆盖git中的合并文件?

  1. 开始编辑file.txt的
  2. 确实含有file.txt的回购一个“混帐拉”。 File.txt是合并冲突的一部分。
  3. 对我在步骤1中打开的file.txt版本做了一些编辑。
  4. 保存了我在步骤1中打开的文件,覆盖合并。
  5. ???

我需要解决步骤2中的合并,然后将该结果与步骤2中所做的编辑合并。我该怎么做?

+0

你还必须在文件中的合并块? –

+0

你有没有完成合并? –

+0

@jcm,不,我没有,如果是合并块,你的意思是<<<<<等。 – mmr

回答

3

听起来像你的问题只是你重写了文件并丢失了合并冲突标记。处理这个问题最简单的方法是使用git mergetool,它将使用GUI合并工具来处理冲突。该工具不依赖冲突标记文件的工作副本版本,它实际上使用您选择的GUI工具重新合并原始文件。我强烈建议将它作为您的常见合并冲突解决方案。

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

如果要保存所做的本地更改,可以使用git diff :2:file.txt file.txt查看file.txt合并前副本与保存到磁盘的副本之间的差异。您可以将其传输到一个文件中,以便稍后在解决合并后重新创建您的更改,甚至可以使用git apply与文件一起作为补丁应用(只要它不触及合并改变)。

+0

@ KevinBallard--会favoretti的隐藏想法帮助保持步骤3和4的变化? – mmr

+0

@ mmr:可能不是。我不太清楚'git stash'会以你当前的状态运行它,因为我不太确定'git diff - file.txt'实际上会以你当前的状态打印。您可能会尝试像'git diff:2:file.txt file.txt'这样的*,它可能会在您之前版本的file.txt(合并之前)和您保存到磁盘的当前版本之间给出一个差异,但是我不能确定没有测试(并且我没有合适的冲突方便测试)。如果确实有效,您可以将其传输到文件以保存。 –

+0

@mmr:是的,'git stash'会在当前状态下出错。 'git diff'将会打印一个冲突风格的差异,这是非常令人困惑的。然而'git diff:2:file.txt file.txt'将会打印出你想要的,这就是你所做的改变。 –

1

尝试这样做:

git checkout --merge -- file.txt 
+0

如果这样做我认为它确实如此,那真是太棒了。 –

+1

请注意,这与'git checkout -m - file.txt'完全一样,我在回答中提出了这个建议。 –