我刚刚在我的git repo中犯了一个错误(愚蠢的编程,而Dayquil'd)。我的步骤是:如何恢复覆盖git中的合并文件?
- 开始编辑file.txt的
- 确实含有file.txt的回购一个“混帐拉”。 File.txt是合并冲突的一部分。
- 对我在步骤1中打开的file.txt版本做了一些编辑。
- 保存了我在步骤1中打开的文件,覆盖合并。
- ???
我需要解决步骤2中的合并,然后将该结果与步骤2中所做的编辑合并。我该怎么做?
我刚刚在我的git repo中犯了一个错误(愚蠢的编程,而Dayquil'd)。我的步骤是:如何恢复覆盖git中的合并文件?
我需要解决步骤2中的合并,然后将该结果与步骤2中所做的编辑合并。我该怎么做?
听起来像你的问题只是你重写了文件并丢失了合并冲突标记。处理这个问题最简单的方法是使用git mergetool
,它将使用GUI合并工具来处理冲突。该工具不依赖冲突标记文件的工作副本版本,它实际上使用您选择的GUI工具重新合并原始文件。我强烈建议将它作为您的常见合并冲突解决方案。
如果您确实希望文件返回冲突标记,则可以使用git checkout -m -- file.txt
。这将重新创建文件的合并冲突版本。请注意,您在步骤3和步骤4中所做的任何更改都将丢失。
如果要保存所做的本地更改,可以使用git diff :2:file.txt file.txt
查看file.txt合并前副本与保存到磁盘的副本之间的差异。您可以将其传输到一个文件中,以便稍后在解决合并后重新创建您的更改,甚至可以使用git apply
与文件一起作为补丁应用(只要它不触及合并改变)。
@ KevinBallard--会favoretti的隐藏想法帮助保持步骤3和4的变化? – mmr
@ mmr:可能不是。我不太清楚'git stash'会以你当前的状态运行它,因为我不太确定'git diff - file.txt'实际上会以你当前的状态打印。您可能会尝试像'git diff:2:file.txt file.txt'这样的*,它可能会在您之前版本的file.txt(合并之前)和您保存到磁盘的当前版本之间给出一个差异,但是我不能确定没有测试(并且我没有合适的冲突方便测试)。如果确实有效,您可以将其传输到文件以保存。 –
@mmr:是的,'git stash'会在当前状态下出错。 'git diff'将会打印一个冲突风格的差异,这是非常令人困惑的。然而'git diff:2:file.txt file.txt'将会打印出你想要的,这就是你所做的改变。 –
尝试这样做:
git checkout --merge -- file.txt
如果这样做我认为它确实如此,那真是太棒了。 –
请注意,这与'git checkout -m - file.txt'完全一样,我在回答中提出了这个建议。 –
你还必须在文件中的合并块? –
你有没有完成合并? –
@jcm,不,我没有,如果是合并块,你的意思是<<<<<等。 – mmr