假设我有一个文本文件
alex
bob
matrix
will be removed
git repo
Run Code Online (Sandbox Code Playgroud)
我已将其更新为
alex
new line here
another new line
bob
matrix
git
Run Code Online (Sandbox Code Playgroud)
在这里,我添加了行号(2,3)和更新的行号(6)
如何使用git diff或任何其他git命令获取这些行号信息?
是否可以显示两次提交之间的文件总大小差异?就像是:
$ git file-size-diff 7f3219 bad418 # I wish this worked :)
-1234 bytes
Run Code Online (Sandbox Code Playgroud)
我试过了:
$ git diff --patch-with-stat
Run Code Online (Sandbox Code Playgroud)
这显示了diff中每个二进制文件的文件大小差异 - 但不是文本文件,而不是文件总大小差异.
有任何想法吗?
我的编辑器正在更改源文件的行结尾.当我这样做的时候git diff,我会看到两次相同的线 - 一次一次,-一次一次+- 没有明显的区别.
我该如何git diff告诉我实际上这个变化是什么?
有几次,我遇到过这样的说法:如果你将一个函数从一个文件移动到另一个文件,Git可以跟踪它.例如,这个条目说,"Linus说,如果你将一个函数从一个文件移动到另一个文件,Git会告诉你整个移动过程中单个函数的历史."
但我对Git的一些引擎盖设计有一点了解,我不知道这是怎么回事.所以我想知道......这是正确的陈述吗?如果是这样,这怎么可能?
我的理解是Git将每个文件的内容存储为Blob,每个Blob都有一个全局唯一的标识,该标识来自其内容和大小的SHA哈希.然后Git将文件夹表示为树.任何文件名信息都属于Tree,而不属于Blob,因此文件重命名例如显示为对Tree的更改,而不是Blob.
因此,如果我有一个名为"foo"的文件,其中包含20个函数,以及一个名为"bar"的文件,其中包含5个函数,我将其中一个函数从foo移动到bar(分别生成19和6), Git如何检测到我将该函数从一个文件移动到另一个文件?
根据我的理解,这将导致2个新的blob存在(一个用于修改的foo,一个用于修改的条).我意识到可以计算diff以显示函数从一个文件移动到另一个文件.但是我没有看到关于函数的历史如何可能与bar而不是foo相关联(反正不是自动的).
如果Git的是真正看里面单个的文件,并计算每个函数BLOB(这将是疯狂的/不可行的,因为你必须知道如何解析任何可能的语言),那么我可以看到这是可能的.
所以...声明是否正确?如果它是正确的,那么我理解中缺少什么?
我正在通过一个代码库并修复空白怪异并且通常会修正缩进等等,我想确保我没有无意中进行任何其他更改,所以我在git diff -w显示所有已更改文件的差异而忽略空格差异.问题是,这实际上并没有忽略所有的空白差异 - 至少我认为只是空白差异.例如,在以下输出中git diff -w,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
Run Code Online (Sandbox Code Playgroud)
你可以看到我只有
这个问题看起来似乎可能首先提供答案,但它处理两个特定文件之间的差异,而不是两个特定提交之间的差异.通过搜索发现的其他一切也是一个死路一条.例如,这个问题是关于合并,而不是显示差异,这个问题涉及显示单词级差异,等等.
我已经使用git多年了,并且总是想知道为什么git diff用/和b /作为修改文件的名称前缀.我预计最终会偶然发现一个有用的用例,但直到现在它总是令人讨厌而且从来没有用过.
到底有什么好处呢?为什么默认启用?在哪些情况下有用?
diff在我提交拉取请求之前尝试使用GitHub仓库使用我的本地文件,这样我就可以看到会出现什么,有没有准确的方法呢?我假设GitHub的比较工具操纵Git的diff?
以下git命令有什么区别?
git diff HEADgit diff HEAD^git diff --cached 或同义词 git diff --stagedgit diff假设我在git仓库中对未耦合的文件进行了一些无关的更改.我想分别查看和提交每个文件.
我运行magit-status,并获得已更改文件的列表.但是我能找到的唯一的magit diff命令(d并且D)可以区分整个修改,而不是单个文件.
我想要输出git diff <filename>,但在magit diff缓冲区.我如何让magit只传出一个文件?
这个早期的问题要求4种不同的Git差异策略之间存在差异,但唯一的区别就是myers和之间的区别patience,这在其他地方得到了很好的解释.
该histogram战略如何运作?有什么区别patience?在GIT-DIFF手册页只能说,它"伸出耐心算法'支持低发生共同的元素’." 其他页面提到它更快,它来自JGit,但它们没有解释其算法或结果的不同之处或方式patience.
我在哪里可以找到与histogram算法相关的patience算法描述,其详细程度与Bram Cohen对patience算法的原始描述相同?
(如果只是实现性能的问题,没有会产生不同结果的情况,为什么它不仅仅作为新的后端实现patience?)