我错误地替换了Git跟踪的文档中的所有内容和保存行。我之前做过一些工作并忘记在执行此操作之前作为检查点提交,因此恢复是不可取的,因为它会恢复我的所有工作。我想使用Git的帮助只恢复替换所有操作。
我知道我需要恢复的所有行,因为它们都有相同的新行。从像SourceTree这样的GUI工具我可以逐个点击Discard Hunk,但是我想丢弃很多这样的位置。我想要恢复的所有地方都有新的行
m_Sprite: {fileID: 21300164, guid: 791de2a5646d94a15a09bb1d7e79a0e6, type: 3}
但旧线不一定是必要的。 (实际上我将这两种旧行更改为相同的新行)是否有任何脚本方式来匹配更改行的模式,以便我可以有选择地将它们全部还原?谢谢。
以交互方式使用git add -p
添加除了我不想要前进的大块头之外的所有内容非常繁琐,因为它会逐一询问你,但是有很多作品要添加,同时我不想要的帅哥几乎每个文件都混在一起。 (所以我必须非常小心git问的每一个问题)同样适用于git checkout -p
去除我不想倒退的帅哥。
答案 0 :(得分:3)
好的,我设法使用补丁修复了问题。
首先,我把这个乱糟糟的状态作为检查点。然后我可以使用
生成一个这种状态的补丁(我想要恢复的替换线以及我不想丢失的所有工作)以及之前的提交(记住正确的行) git diff --binary HEAD^ HEAD > ~/Desktop/patch.diff
请注意,先前的提交首先出现在命令中。
将补丁保存在某个地方后,我会将其重置为上一次提交并git clean -f
。现在,如果我git apply patch.diff
我会到达同一点(但仍然保持先前的提交)这个想法是在申请之前直接编辑补丁。
补丁由帅哥组成,因此要禁用某个大块,我不希望这种方法是将+
行替换为前一个-
行。我可以在VSCode中使用正则表达式搜索来搜索带有\n
的多行(不要忘记将+字符转义为\+
,这样它就不算作正则表达式)并将它们全部替换掉。
这种方法比移除帅哥更好,因为没有机会破坏补丁的格式。补丁不知道它是否正在变换为同一行,什么都不做。
在编辑补丁并应用之后,我得到了所有的更改,减去了我们之前编辑的帅哥。所以它等于“恢复我不想要的所有帅哥”的行为。