问题描述
我正在使用git diff来找出哪些方法已更改。显然,它错误地定义了块头(如下所示),因此我无法找到一种方法来获取已更改方法的列表。
@@ -22,7 +22,7 @@ void func2(){
void func1(){
cout<<"Function 1"<<endl;
- int i=1000;
+ int i=100;
while(i>0){
func2();
i--;
此处更改在func1()中,但块头在func2()中。我尝试更改一些测试函数,结果发现它总是选择所需函数上方的行/函数作为块头。
我尝试在根目录中创建一个 .gitattributes 文件,并放置*.cpp diff=cpp
以便为差异启用cpp,很遗憾,这不能解决问题。
解决方法
这里的问题是此差异是在函数func2
中。
请注意,差异以空行开头,后跟函数func1
的定义。此定义位于diff-hunk内部,因此diff-hunk在函数之前 开始。大概在空白行上方,我们将找到更多func2
的代码。这就是git diff
告诉您的上下文:差异出现在之前。
一个人可以(相当合理!)认为diff内的唯一变化是在函数func2
中,但是Git应该如何处理读取的diff块,例如: / p>
T f1() {
+ new_call();
return somevalue;
}
T f2() {
- old_call();
return somevalue;
}
在这里,差异在内部影响f1
和f2
这两个函数。 Git对“如何标记它”的答案是从整个文本开始,然后向后搜索一些正则表达式。如果与f0
相匹配,则为差异上的标签。
(注意:内置的正则表达式工作得很好,但不能识别所有语言的所有可能的法律函数定义。更改显示的上下文量对于此特定示例应该有所帮助,尽管您必须缩小它最多1行。)