首页 文章

如何显示已上演的更改?

提问于
浏览
1803

我上演了一些改变来承诺;如何查看为下一次提交而暂存的所有文件的差异?我知道git status,但我想看到实际的差异 - 而不仅仅是分阶段文件的名称 .

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

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

不幸的是,我无法理解这一点 . 必须有一些方便的单行,我可以创建一个别名,对吗?

13 回答

  • 1455

    它应该只是:

    git diff --cached
    

    --cached 表示对当前 HEAD 显示缓存/索引(即暂存更改)中的更改 . --staged--cached 的同义词 .

    --staged--cached 没有指向 HEAD ,只是相对于 HEAD 而言 . 如果您使用 git add --patch (或 git add -p )选择要提交的内容, --staged 将返回正在播放的内容 .

  • 51

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

    Simple Git diffs

    git diff

    显示工作目录和索引之间的更改 . 这显示了已更改的内容,但未提交提交 .

    git diff --cached

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

    git diff HEAD

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

    Also

    关于365Git.的更多细节

  • 44

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

    Screenshot of diffuse with staged and unstaged edits

    用它调用它

    diffuse -m
    

    在你的Git工作副本中 .

    如果你问我,十年来我见过的最佳视觉效果 . 此外,它并不特定于Git:它与许多其他VCS互操作,包括SVN,Mercurial,Bazaar,......

    另见:Show both staged & working tree in git diff?

  • 2

    注意 git status -v 也显示了分阶段的变化! (意思是你需要上演 - git add - 一些变化 . 没有分阶段的变化,没有与 git status -v 的差异 .
    这是因为Git 1.2.0, February 2006

    在长格式(默认)中,git status有一个未记录的"verbose"选项,它实际显示HEAD和索引之间的差异 .

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

    git status -v -v
    
  • 2214

    您可以使用此命令 .

    git diff --cached --name-only
    

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

  • 0

    从版本1.7及更高版本应该是:

    git diff --staged
    
  • 16

    使用可视DIFF工具

    默认答案(在命令行中)

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

    $ git diff --cached
    

    $ git diff --staged 这是别名 .

    启动Visual Diff工具

    默认答案将在git bash(即命令行或控制台)中吐出diff变化 . 对于那些喜欢分阶段文件差异的可视化表示的人来说,git中有一个脚本可以为每个查看的文件启动一个可视化差异工具,而不是在命令行上显示它们,称为 difftool

    $ git difftool --staged
    

    这将与 git diff --staged 执行相同的操作,除非运行diff工具(即每次文件由diff处理),它将启动默认的可视化差异工具(在我的环境中,这是 kdiff3 ) .

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

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

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

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

    $ git difftool -y --staged
    

    在这种情况下,它将在视觉差异工具中拉出每个文件,一次一个,然后在之后调出下一个文件工具已关闭 .

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

    $ git difftool -y --staged <<relative path/filename>>
    

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

    $ git difftool --help
    

    设置Visual Git工具

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

    $ git difftool -t <tool> <<other args>>
    

    或者,请参阅difftool手册页,了解如何配置git以使用其他默认的可视化差异工具 .

  • 7

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

  • 7

    如果您的目的是推送目标远程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
    
  • 4

    对于Staging Area vs Repository比较使用

    $git diff --staged
    

    对于Working vs Repository比较使用

    $ git diff
    

    但如果文件被更改并添加到临时区域( $ git add fileName ),我们会尝试查看与( $ git diff )的区别 . 它不会返回任何差异,因为文件位于暂存区域,并且不会与存储库进行比较 .

  • 23

    默认情况下, 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
    

    Example

    $ 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;
    
  • 13

    git guigit-cola 是用于查看和操作索引的图形实用程序 . 两者都包括用于分段文件的简单视觉差异, git-cola 还可以启动更复杂的并排视觉差异工具 .

    请参阅我在How to remove a file from the index in git?的密切相关答案,以及Git - GUI Clients的官方目录 .

  • 7

    考虑一下 gitk 工具,也提供了git,对于查看更改非常有用

相关问题