问题标签 [git-diff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
54477 浏览

git - 如何让 diff 像 git-diff 一样工作?

我喜欢git diff. 行间变化的颜色和+/-表示比 GNU diff 更容易阅读。

我可以在git repo 之外git diff使用flag 运行,它工作正常。--no-index但是,它似乎缺少--exclude从递归中排除文件或子目录的选项diff

有没有办法两全其美?(GNU diff 的颜色选项和+/-格式git diff--exclude选项)。

我已经尝试过colordiff,但我仍然更喜欢的输出格式git diff

0 投票
5 回答
11090 浏览

git - Git 真的可以跟踪单个函数从一个文件到另一个文件的移动吗?如果是这样,怎么做?

有好几次,我遇到过这样的说法,如果你将一个函数从一个文件移动到另一个文件,Git 可以跟踪它。例如,这个条目说,“Linus 说如果你将一个函数从一个文件移动到另一个文件,Git 会告诉你这个移动过程中单个函数的历史。”

但是我对 Git 的一些底层设计有一点了解,我不明白这是怎么可能的。所以我想知道......这是一个正确的说法吗?如果是这样,这怎么可能?

我的理解是,Git 将每个文件的内容存储为一个 Blob,每个 Blob 都有一个全局唯一标识,该标识来自其内容和大小的 SHA 哈希值。然后 Git 将文件夹表示为树。任何文件名信息都属于树,而不属于 Blob,因此文件重命名例如显示为对树的更改,而不是对 Blob。

因此,如果我有一个名为“foo”的文件,其中包含 20 个函数,以及一个名为“bar”的文件,其中包含 5 个函数,然后我将其中一个函数从 foo 移动到 bar(分别导致 19 和 6), Git 如何检测到我将该函数从一个文件移动到另一个文件?

据我了解,这将导致存在 2 个新 blob(一个用于修改后的 foo,一个用于修改后的 bar)。我意识到可以计算出一个差异来表明该函数已从一个文件移动到另一个文件。但是我看不到有关该函数的历史记录如何可能与 bar 而不是 foo 相关联(无论如何都不会自动关联)。

如果 Git 要实际查看单个文件的内部,并为每个函数计算一个 blob(这将是疯狂的/不可行的,因为您必须知道如何解析任何可能的语言),那么我可以看到这是如何可能的。

所以……这个说法正确与否?如果它是正确的,那么我的理解中缺少什么?

0 投票
2 回答
4882 浏览

git - 如何在执行“git diff --color”的同时进行不区分大小写的 git diffing?

git diff是否可以在做的同时不区分大小写git diff --color-words?还是我需要在做的时候使用外部差异程序git diff --color-words

(注意:如果你想要的只是 git diff case insensitive 请转到这个问题 How to perform case insensitive diff in Git

0 投票
3 回答
6846 浏览

git - 如何从 git index 获取文件的内容?

我有一个文件已经添加到我的本地存储库中。我已经在工作树中对其进行了修改,因此git status向我显示了修改后的文件。在暂存文件之前,我想知道索引中保存的文件内容是什么。

我可以想到两种方法:

  1. 还原由 生成的补丁git diff,并将其应用于工作树中的文件
  2. 使用git checkout-index,指向一个临时文件并从那里读取内容

有没有更简单的方法?

0 投票
1 回答
2460 浏览

git - 如何使用 git diff -G?

我正在编写一个小测试套件,该套件运行要在一堆输入文件上进行测试的工具。对于每个输入文件,该工具正在创建一个相应的输出文件(两者都是 XML 格式)。输入和输出文件在 Git 存储库中签入。

输出文件带有编译工具的时间,因此输出文件在被测试工具重新创建后肯定会被修改。

为了快速了解输出是否已更改(当我修改工具的源代码时),我想检查节点的内容是否OutputFingerprint已更改(对输出文件相关部分的内容进行简单散列) .

阅读手册git-diff,我发现有一个-G选项:

-G<regex>
查找添加或删除的行与给定 <regex> 匹配的差异。

不幸的是,它们没有提供如何使用该-G选项的示例。

我的第一个想法是简单地写

但这是错误的:

接下来的想法是将正则表达式放在斜杠中,这也没有成功:

-G此外,简单地在and之间放置一个空格OutputFingerprint是行不通的:

当我在git diff没有任何参数的情况下调用时,我得到了修改:

另一个想法是使用git diff -S".*OutputFingerprint.*" --pickaxe-regex,但这也不成功。

git --version给我git version 1.7.3.1.msysgit.0是否相关。

当我询问git diff --help时,提供的手册向我显示了该-G选项。

那么,谁能给我一个如何git diff -G正确使用的例子?

0 投票
1 回答
26456 浏览

git - 查看 git 中分阶段更改的差异

可能重复:
我如何显示已上演的更改?

有没有一种简单的方法来查看我在 git 中待处理的分阶段更改的差异?我已经上演了几个文件,但想在按下按钮之前最后看一下我正在提交的内容。我还有其他几个未暂存的更改,我想在单独的提交中进行,因此取消暂存,执行git diff,然后分页到我想要的文件并不是一个理想的选择。

例子:

我真的只是想看看我改变了什么,foo.java而不必取消舞台。

0 投票
3 回答
15489 浏览

git - 'git diff' 显示不够

我想看看master分支和我的 feature 分支之间的区别。我有很多从 master 到我的 feature 分支的 pull,并且希望看到如果我将我的 feature 合并到 master 中将会添加的更改。

这是我的情况:

我的问题git diff master feature似乎只显示提交号 2。我怎样才能看到 GitHub 拉取请求将显示的差异,我相信这是提交 1 的全部方式?

我注意到git cherry向我展示了我希望看到差异的提交。

0 投票
2 回答
5098 浏览

git - 使用 git 比较两个提交中的一个文件

我有一个文件在某处损坏了,我找到了它仍然修复的最后一点。

我想知道如何使用 git 来比较两个提交中的一个文件,或者这是否是最好的播放方式!!

0 投票
1 回答
563 浏览

git - git line-endings 问题只有一个 repo 的克隆

好的,我有一个 git repo。所有克隆都运行相同版本的 git(几乎是最新的)。

  • “起源”在 GitHub.com 上
  • 在各种 CentOS 服务器上克隆,没有遇到行尾问题
  • 在我的 Mac OS 系统上克隆(通过 cmd 行和/或 Tower GUI 使用 git),行尾也没有问题..

  • Ubuntu 服务器上的另一个克隆,当我对文件进行任何更改时,git-diff 认为整个文件已更改

那么,我必须如何在这个 Ubuntu 机器上使用 git-config 来解决问题?我已经阅读了有关该主题的各种文章(和 git-config 文档),但并不完全清楚决定性的一击修复是什么......?

0 投票
4 回答
11401 浏览

git - 让 git 在差异中突出显示制表符?

我试图确保我不会提交使用制表符进行缩进的代码。这是我应用于我自己的提交的软约束(现在我们没有缩进字符的标准,但我想使用空格,因为在空格的宽度上没有分歧,但有些人们使用宽度为 4 的选项卡与宽度为 8 的选项卡)。

检查此类约束的最简单方法通常是在每次提交时查看 git diff 的实际输出,看看是否有任何问题。例如,对我来说,默认情况下,尾随空格是突出显示的,并且窗口换行符在差异中也可见,所以如果我要不小心提交带有尾随空格的代码,我会收到警报。有没有办法让制表符也出现在 git diff 中?