当我们执行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] 删除。
我来说两句