git:撤消功能更改

unixia

当我们执行a时git diff,它很好地向我们显示了diff以及行号和行所在的函数:

@@ -614,10 +636,10 @@ def write_my_name(name):
                         .
                         .
-                        len(name),
+                        len(getattr(resume, name)),

当我执行操作时,git add是否还会存储这些函数引用?

另外要考虑的是,我们git log -L<func_name>:file_name不确定该如何工作。我的猜测是对函数的引用正在存储吗?

如果以上问题的答案为是。是否可以撤消特定功能的更改?我找不到的开关reset

要同时考虑两种情况:未分阶段进行的更改和为提交而进行的更改。

感谢您抽出宝贵时间阅读本文。

星期二

当我们执行a时git diff,它很好地向我们显示了diff以及行号和行所在的函数...

是的,但这全都基于技巧。:-)

首先,git diff找到一个编辑序列(请参阅我的答案git如何在文件中生成差异?的链接)。然后,它使用编辑序列声明这是您所做的,即使实际上不是您所做的,也就是更改应用于相同的输入后,将完成相同的操作

然后,假设Git将更改表示为影响行M-N,则Git会通过数目小于或等于M的行进行正则表达式搜索(基本上,测试从M开始的每一行,朝着第1行移动) )。这些正则表达式内置在Git源代码中。您可以按照gitattributes文档说明(某种程度上)设置自己的名称(搜索“定义自定义的块头”)。如果表达式与该行匹配,则文本将包含在@@之后

当我执行操作时,git add是否还会存储这些函数引用?

否:git add仅将文件的工作树版本复制到索引中,替换之前索引中的任何版本。但是请注意,它将git add -p运行Perl脚本该脚本执行了非常不同的操作;请仔细阅读以了解其功能以及操作方式。

另外要考虑的是,我们git log -L<func_name>:file_name不确定该如何工作。

也可以使用正则表达式匹配技巧在文件中查找函数。

是否可以撤消特定功能的更改?我找不到的开关reset

目前不是。为此,您可以修改Perl脚本,因为git reset -p 调用了相同的perl脚本。不幸的是,内置正则表达式没有导出-因此您可以阅读用户的配置以检查自定义正则表达式,但是否则,您将不得不将内置正则表达式重新编码到Perl脚本中。

要求Git人员增强userdiff代码以能够作为管道命令或viagit config --get公开内置的正则表达式可能是合理的当然,您还应该意识到,这些正则表达式通常是实际解析器所做的近似。(由于宏替换,类C语言特别有问题-您必须先通过适当的预处理程序运行整个输入,然后才能真正找到令牌。)

请注意,Perl脚本的已安装版本被调用,git-add--interactive并位于由输出的“ git-core”目录中git --exec-path由于它脚本,因此很容易修改。不过,将脚本复制到您自己的脚本目录中的新名称(例如named)git-my-fancier-script,然后将其调用可能是最明智的选择git my-fancier-script

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章