如何非交互式恢复Git中文件指定行的修改?
撤销文件特定行的修改(非交互式)
如果你不想用交互式的-p选项,可以通过提取HEAD版本中对应行的内容,替换当前文件的目标行来实现,以下是两种可靠的方法:
方法一:通过head/tail拼接内容
这种方式逻辑直观,跨平台兼容性好:
# 拼接前14行、HEAD版本的15-17行、18行及以后的内容,生成临时文件 (head -14 myfile.txt && git show HEAD:myfile.txt | sed -n '15,17p' && tail -n +18 myfile.txt) > myfile.txt.tmp # 替换原文件 mv myfile.txt.tmp myfile.txt
方法二:用sed直接替换目标行
如果熟悉sed命令,可以一步完成替换(注意不同系统sed的-i参数略有差异):
- Linux系统:
sed -i '15,17c\'"$(git show HEAD:myfile.txt | sed -n '15,17p')" myfile.txt
- macOS系统(需要给
-i加空参数指定备份,若不需要备份可忽略.bak):
sed -i.bak '15,17c\'"$(git show HEAD:myfile.txt | sed -n '15,17p')" myfile.txt # 可选:删除自动生成的备份文件 rm myfile.txt.bak
说明
git show HEAD:myfile.txt:从仓库的HEAD版本中读取myfile.txt的内容sed -n '15,17p':只提取第15到17行的内容- 两种方法都不会影响文件中其他未修改的行,仅覆盖目标行的修改。
内容的提问来源于stack exchange,提问作者user13343959
相关产品推荐
相关产品推荐

