如何显示已上演的更改?

文章提供了多种方法来查看Git中暂存的更改差异,包括使用`gitdiff--cached`或`gitdiff--staged`命令,以及使用`gitdifftool--staged`来启动视觉差异工具。此外,还讨论了`gitstatus`的不同选项,如`-v`和`--cached`,以及如何配置和使用不同的可视化工具,如Meld和VSCode。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问:

我上演了一些要提交的更改;如何查看为下一次提交暂存的所有文件的差异?我知道 git status,但我想查看实际的差异 - 而不仅仅是暂存文件的名称。

我看到 git-diff(1) 手册页说

git diff [–options] [–] […] 这个表格是用来查看你相对于索引所做的更改(下一次提交的暂存区)。换句话说,差异是你可以告诉 git 进一步添加到索引但你仍然没有。您可以使用 git-add(1) 暂存这些更改。

不幸的是,我不能完全理解这一点。一定有一些方便的单线,我可以为其创建别名,对吧?

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

答1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

它应该只是:

git diff --cached

–cached 表示针对当前 HEAD 显示缓存/索引中的更改(即分阶段更改)。 --staged 是 --cached 的同义词。

–staged 和 --cached 不指向 HEAD,只是相对于 HEAD 不同。如果您使用 git add --patch(或 git add -p)挑选要提交的内容,–staged 将返回暂存的内容。

如果您只想要文件名,请在 stackoverflow.com/a/4525025/255187 的每个帖子中执行以下 git diff --name-only --cached

将此与 git difftool --staged 而不是 git diff --staged 一起使用以在每个文件上启动默认的视觉差异工具。 difftool 也可以用任何其他参数代替 diff。

您可以使用 git difftool --staged -d 在可视化工具中区分两个目录,而不是一次区分一个文件。

因为这个被标记为答案并首先显示它应该在顶部包括 git diff,然后是 git [[others]],只是我的 2 美分

要查看单个暂存文件中的更改,可以使用以下方法:git diff --cached --

答2:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

一个简单的图形使这一点更清楚:

https://i.stack.imgur.com/tVHYO.png

混帐差异

显示工作目录和索引之间的更改。这显示了已更改的内容,但未暂存以进行提交。

git diff --cached

显示索引和 HEAD(这是此分支上的最后一次提交)之间的更改。这显示了已添加到索引并暂存以进行提交的内容。

git diff 头

显示工作目录和 HEAD 之间的所有更改(包括索引中的更改)。这显示了自上次提交以来的所有更改,无论它们是否已准备好提交。

还:

365Git. 有更多细节

恐怕这是幼稚的(就像任何 git 解释的情况一样)。如果您对 foo.c 进行了本地修改并且不执行 git add foo.c,则 foo.c 不在索引中;它不是为提交而上演的。如果 git diff foo.c 天真地将工作 foo.c 与索引进行比较,那么它必须显示一个空/不存在的文件与 foo.c 的全部内容之间的巨大差异。因此,事实上,当索引中不存在文件时,git diff 会针对该文件回退到使用 HEAD 副本。

@Kaz 严格来说,该索引不是一张白纸。它是应用暂存更改的 HEAD 的虚拟副本。请记住,Git 通过保存更改而不是保存整个文件来工作。当您暂存文件时,它仅存储所做的更改。如果索引像您暗示的那样是空白的,它将不知道如何保存索引中的更改,并且必须将整个文件保存为“新添加的” - 这是错误的。

@Kaz 索引和 HEAD 都将具有 foo.c 文件的未更改版本(它们不是物理副本,而只是您和我的逻辑副本。对于 Git,它们只是每次提交的相同数据流曾经涉及该文件所指的)。因此,当您在 完全 未暂存的 foo.c 上执行 git diff 时,它并没有真正回退到 HEAD 它实际上是在使用索引进行差异(它恰好包含文件的完全相同版本正如 HEAD 所做的那样)。所以图形是正确的。

您好,我想知道在这种情况下“索引”是什么意思?谢谢!

@TomRussell git status -v 等同于 git diff --cached(当然还有 git status)

答3:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

请注意,git status -v 也 显示了阶段性更改! (这意味着您需要分阶段进行 – git add – 一些更改。没有分阶段的更改,没有与 git status -v 的差异。它从 Git 1.2.0, February 2006 开始执行此操作)

在其长格式(默认)中,git status 有一个未记录的“详细”选项,它实际上显示了 HEAD 和索引之间的差异。

它即将变得更加完整:参见“Show both staged & working tree in git diff?”(git 2.3.4+,2015 年第二季度):

git status -v -v

最后一行应该是 git diff HEAD

@artur 为什么?答案的重点是提到 git status -vv 还包括 git diff HEAD 所做的事情。

不适用于 git version 1.8.3.1。我知道它很旧,但如果可能,请注意何时引入此标志。

@onebree 1.8.3.1 是 2013 年 6 月,确实很旧。但 git status -v 较旧(github.com/git/git/commit/…,git 1.2.0,2006 年 2 月!)。请注意,它会显示 index 和 HEAD 之间的差异:如果您在索引中添加了任何内容(没有 git add),那么 git status -v 将不会显示任何差异。 git status -v -v 较新(Git 2.3.4,2015 年 3 月)

@VonC 那是我的错误......我做了git diff -v。

答4:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

如果您对视觉并排视图感兴趣,diffuse 视觉差异工具可以做到这一点。如果部分但不是全部更改已上演,它甚至会显示三个窗格。在发生冲突的情况下,甚至会有四个窗格。

https://i.stack.imgur.com/8Z6MO.png

调用它

diffuse -m

在你的 Git 工作副本中。

如果你问我,十年来我见过的最好的视觉效果。此外,它并非特定于 Git:它与大量其他 VCS 互操作,包括 SVN、Mercurial、Bazaar、…

另请参阅:Show both staged & working tree in git diff?

谢谢,这看起来是个不错的工具。到目前为止,我发现 Meld 是 Linux 上最好的视觉差异工具,但我错过了能够从剪贴板中区分文本的能力——Meld 需要输入文件。漫反射允许这样做,以及手动重新对齐。会尝试一段时间。

到diffuse.sourceforge.net 的链接断开,现在使用sourceforge.net/projects/diffuse。

brew install diffuse 适用于 OS X。如果未暂存和暂存更改都不会显示 3 个窗格 - 您的意思是索引中还没有更改吗?

你有哪个版本的漫反射?是的——如果你添加一个文件然后在本地修改它,它应该显示三个窗格。

您还可以将 diffuse 设置为默认的 difftool 并使用该内置机制/工具/别名来启动它。在这里查看我的答案:

答5:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

对于暂存区与存储库(最后一次提交)比较使用

$ git diff --staged

该命令将您的 staged($ git add fileName) 更改与您的上次提交进行比较。如果您想查看已暂存的内容将进入您的下一次提交,您可以使用 git diff --staged。此命令将您的分阶段更改与您的上次提交进行比较。

对于工作与分期比较使用

$ git diff 

该命令将工作目录中的内容与暂存区域中的内容进行比较。重要的是要注意 git diff 本身并不会显示自上次提交以来所做的所有更改 - 仅显示仍未暂存的更改。如果您已暂存所有更改($ git add fileName), git diff 将不会给您任何输出。

此外,如果您暂存文件($ git add fileName)然后对其进行编辑,则可以使用 git diff 查看暂存文件中的更改和未暂存的更改。

“对于 Working 与 Repository 的比较,请使用 $ git diff”。我很确定 git diff 比较了 Working 与 Staging。请参阅stackoverflow.com/a/1587952

答6:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

您可以使用此命令。

git diff --cached --name-only

git diff 的 --cached 选项表示获取暂存文件,–name-only 选项表示仅获取文件名。

请编辑更多信息。不鼓励使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。

不知道为什么我想要这个,使用 --name-only 选项我不妨使用常规的 git status

答7:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

使用视觉差异工具

默认答案(在命令行)

此处的最佳答案正确显示了如何查看 Index 中的缓存/暂存更改:

$ git diff --cached

或 $ git diff --staged,它是一个别名。

改为启动 Visual Diff 工具

默认答案将在 git bash (即在命令行或控制台中)吐出差异更改。对于那些喜欢暂存文件差异的可视化表示的人,git 中有一个可用的脚本,它为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示它们,称为 difftool:

$ git difftool --staged

这将与 git diff --staged 执行相同的操作,除了任何时候运行 diff 工具(即每次 diff 处理文件时),它将启动默认的可视 diff 工具(在我的环境中,这是 kdiff3 )。

工具启动后,git diff 脚本将暂停,直到您的可视化 diff 工具关闭。因此,您需要关闭每个文件才能查看下一个文件。

你总是可以在 git 命令中使用 difftool 代替 diff

对于您的所有视觉差异需求,git difftool 将替代任何 git diff 命令,包括所有选项。

例如,要在不询问是否为每个文件执行此操作的情况下启动可视差异工具,请添加 -y 选项(我认为通常您会想要这个!!):

$ git difftool -y --staged

在这种情况下,它将拉出可视差异工具中的每个文件,一次一个,在工具关闭后调出下一个文件。

或者查看在 Index 中暂存的特定文件的差异:

$ git difftool -y --staged <>

有关所有选项,请参见手册页:

$ git difftool --help

设置可视化 Git 工具

要使用默认以外的可视化 git 工具,请使用 -t 选项:

$ git difftool -t  <>

或者,请参阅 difftool 手册页,了解如何配置 git 以使用不同的默认可视 diff 工具。

vscode 的示例 .gitconfig 条目作为 diff/merge 工具

设置 difftool 的一部分涉及更改 .gitconfig 文件,或者通过 git 命令在后台更改它,或者直接编辑它。

您可以在主目录中找到您的 .gitconfig,例如 Unix 中的 ~ 或 Windows 上通常的 c:\users<username>)。

或者,您可以使用 git config -e --global 在默认 Git 编辑器中打开用户 .gitconfig。

以下是我的全局用户 .gitconfig 中将 VS Code 用作差异工具和合并工具的示例条目:

[diff]
    tool = vscode
    guitool = vscode
[merge]
    tool = vscode
    guitool = vscode
[mergetool]
    prompt = true
[difftool "vscode"]
    cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\"
    path = c:/apps/vscode/code.exe
[mergetool "vscode"]
    cmd = code --wait \"$MERGED\"
    path = c:/apps/vscode/code.exe

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

答8:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

从 1.7 及更高版本开始,它应该是:

git diff --staged

答9:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

如果您的意图是推送一个远程 repo 分支并且您在提交更改日志中的第一次传递不完整,您可以在像这样推送之前更正提交语句。

本地

…进行一些更改…

git diff # look at unstaged changes

git commit -am"partial description of changes"

…回想一下提交中未提及的更多更改…

git diff origin/master # 查看暂存但未推送的更改

…修改分阶段提交声明…

git commit --amend -m"i missed mentioning these changes ...."

git push

答10:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

如果您有多个文件进行分阶段更改,使用 git add -i 可能更实用,然后选择 6: diff,最后选择您感兴趣的文件。

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

默认情况下 git diff 用于显示未添加到 git 更新文件列表中的更改。但是,如果您想显示添加或暂存的更改,那么您需要提供额外的选项,让 git 知道您对暂存或添加的文件 diff 感兴趣。

$ git diff          # Default Use
$ git diff --cached # Can be used to show difference after adding the files 
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git 

例子

$ git diff 
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js 
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

-        if (a)
+        if (typeof a !== 'undefined')
             res = 1;
         else
             res = 2;

$ git add x/y/z.js
$ git diff
$

一旦你添加了文件,你就不能使用’git diff’的默认值。你必须这样做: -

$ git diff --cached
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
    --- a/x/y/z.js 
    +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

    -        if (a)
    +        if (typeof a !== 'undefined')
                 res = 1;
             else
                 res = 2;

原文链接:https://www.huntsbot.com/qa/bL89/how-do-i-show-the-changes-which-have-been-staged?lang=zh_CN&from=csdn

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值