标识与上一个git提交位置相对应的当前文件/行
假设我在git存储库中有一个分支。分支的历史记录可能如下所示:标识与上一个git提交位置相对应的当前文件/行,git,diff,Git,Diff,假设我在git存储库中有一个分支。分支的历史记录可能如下所示: A <- [...] <- Z A我将从git log-S开始。将该行作为-S的参数。如果该行没有更改,则应该找到它 从“git日志”手册页: -S<string> Look for differences that change the number of occurrences of the specified string (i.e. addition/deletio
A <- [...] <- Z
A我将从git log-S
开始。将该行作为-S的参数。如果该行没有更改,则应该找到它
从“git日志”手册页:
-S<string>
Look for differences that change the number of occurrences of the
specified string (i.e. addition/deletion) in a file. Intended for
the scripter’s use.
It is useful when you’re looking for an exact block of code (like a
struct), and want to know the history of that block since it first
came into being: use the feature iteratively to feed the
interesting block in the preimage back into -S, and keep going
until you get the very first version of the block.
Binary files are searched as well.
-S
查找更改事件发生次数的差异
文件中指定的字符串(即添加/删除)。打算
编剧的使用。
当您寻找一个精确的代码块(如
结构),并想知道该块的历史,因为它第一次
产生:迭代地使用该特性为
前图像中有趣的块返回到-S,并继续
直到你得到第一个版本的块。
二进制文件也会被搜索。
我建议的最简单答案是:
检查机器的输出
git diff A Z -- src/index.js
您可以手动检查它,或使用脚本处理输出,以发现第122行是如何在a
和Z
之间移动的,并查看差异
如果上述线路的演变过于复杂,您可能需要检查:
git log A..Z -p -- src/index.js
# or :
git log A..Z --reverse -p -- src/index.js
您将看到所述文件的所有单独演变,同样,您可以计算初始行122如何演变,直到Z
我使用git bull
解决了我的问题,并采用了torek建议的相反方法。这适用于我的用例,因为我试图在git存储库中的文件旁边显示元数据,所以我知道我希望找到的原始位置的行集。假设A
是Z
的祖先提交,我们可以执行以下操作:
git-fns Z--api/v3/views.py
这将为文件中的每一行提供提交哈希、原始树路径和行号,例如
481daae85d6 api/v3/files/views.py 2 4) from rest_framework.response import Response
^ ^ ^ ^
$1 $2 $3 $4
让我们将一个位置表示为:@
。这向我们展示了Z:api/v3/views。py@4
最初显示为481daae85d6:api/v3/files/views.py:2
最后一步:我们在A
中确定的位置p
可能不是包含该行的原始提交,这将导致错误否定。导入这些元注释时,我们可以对提交中的特定行执行另一个git任务,以确定原始提交:
git-fns-L,A--
然后我们可以将注释存储在返回的提交散列上,而不是A
这里的开放性问题是这是否足够:即使一行稍微修改了,代码注释也可能仍然相关,而这种方法会导致这些注释“丢失”。感谢您的回答——我对找到相应的行很感兴趣,即使它被更改了。例如,原始行可能是let x=123
,我希望找到匹配行,即使它已更改为const x=123
或let x=456
。话虽如此,我不确定“同一条线”的定义是否清晰。我希望我们能应对一些变化!另外,当行只是在文件中移动时,这是否适用?出现的次数将保持不变。Git总是向后工作,因此如果您确定Z中的行的位置,然后让Git计算A中的行的位置,那么任务就容易多了。Git dull
命令在内部执行此类操作。不过,我认为没有一种简单的方法可以公开计算出的行号。git log
命令也可以使用-L
实现这一点,但是git log
中的算法不如git
中的算法好。尽管如此,git log
还是几乎满足了您的需求,只是方向不对(Z到A)。我试图解决的问题是显示代码上的注释,即使代码会随时间变化。因此,我认为,继续向后工作将是相当低的绩效;也许我可以把它藏起来。谢谢你的主意!