我错误地替换并保存了文档中所有由 Git 跟踪的行。我之前已经完成了一些工作,但在执行此操作之前忘记了作为检查点提交,因此恢复是不可取的,因为它会恢复我的所有工作。我想使用 Git 的帮助仅恢复替换所有操作。
我知道我需要恢复的所有行,因为它们都有相同的新行。从像 SourceTree 这样的 GUI 工具中,我可以一一单击“Discard Hunk”(丢弃块),但有很多这样的位置我想丢弃。我想要恢复的所有地方都有新行说
m_Sprite: {fileID: 21300164, guid: 791de2a5646d94a15a09bb1d7e79a0e6, type: 3}
但老线没必要一样。(事实上,我将两种旧行更改为相同的新行)是否有任何脚本化方法来匹配已更改行的模式,以便我可以有选择地恢复它们?谢谢。
使用git add -p交互方式添加除了我不想继续的帅哥之外的所有内容是非常乏味的,因为它一一询问你,但有太多的作品需要添加,同时我不想要的帅哥几乎混合在一起每个文件。(所以我必须非常小心 git 提出的每一个问题)同样的道理也适用于git checkout -p删除那些我不想倒退的家伙。
好的,我设法使用补丁解决了这个问题。
首先,我将这个混乱的状态作为检查点提交。然后我可以使用以下命令生成此状态的补丁(带有我想要恢复的替换行的补丁以及我不想丢失的所有工作)和上一个提交(记住正确行的补丁)
git diff --binary HEAD^ HEAD > ~/Desktop/patch.diff
请注意,先前的提交在命令中排在第一位。
将补丁保存在某处后,我将其硬重置为之前的提交和git clean -f. 现在,如果我git apply patch.diff会到达同一点(但仍然关注之前的提交),想法是在应用之前直接通过外科手术编辑补丁。
该补丁由大块组成,因此要禁用某个大块,我不希望采用的方法是将行替换+为与前面的行相同的内容-。我可以在 VSCode 中使用正则表达式搜索来搜索多行\n(不要忘记转义 + 字符,这样\+它就不算作正则表达式)并将它们全部替换。
这种方法比删除大块更好,因为没有机会破坏补丁的格式。该补丁不知道它是否正在更改为同一行,什么也不做。
编辑补丁并应用后,我得到了所有更改,减去我们之前编辑的内容。所以这相当于“恢复所有我不想要的帅哥”的行为。
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |