在提交到git之前,如何查看文件中发生的更改?

在提交到git之前,如何查看文件中发生的更改?,git,Git,我注意到,当我在做一两张票的时候,如果我走开,我不知道我做了什么,改变了什么,等等 有没有办法在git add和git commit之前查看对给定文件所做的更改?使用: git diff文件名 显示工作树与索引或树之间的更改、索引与树之间的更改、两棵树之间的更改或磁盘上两个文件之间的更改 你在找什么 根据您的具体情况,有三种使用git diff的有用方法: 显示索引和工作树之间的差异;也就是说,您尚未提交的更改: git diff[文件名] 显示当前提交和索引之间的差异;也就是说,您将要提交的

我注意到,当我在做一两张票的时候,如果我走开,我不知道我做了什么,改变了什么,等等

有没有办法在git add和git commit之前查看对给定文件所做的更改?

使用:


git diff文件名

显示工作树与索引或树之间的更改、索引与树之间的更改、两棵树之间的更改或磁盘上两个文件之间的更改

你在找什么

根据您的具体情况,有三种使用git diff的有用方法:

  • 显示索引和工作树之间的差异;也就是说,您尚未提交的更改:
  • git diff[文件名]
    
  • 显示当前提交和索引之间的差异;也就是说,您将要提交的内容(
    --staged
    做完全相同的事情,使用您喜欢的内容):
  • git diff--cached[filename]
    
  • 显示当前提交和工作树之间的差异:
  • git差异头[文件名]
    

    git diff
    在目录上递归工作,如果没有给出路径,它将显示所有更改。

    记住,您提交的是更改,而不是文件


    出于这个原因,我很少不使用
    git add-p
    (或magit等价物)来添加我的更改。

    对于我来说
    git add-p
    是最有用的方法(我认为git开发人员也是这么认为的)来检查所有未老化的更改(它显示了每个文件的差异),选择一组应该与提交一起进行的更改,然后,当您准备好所有这些内容后,使用git commit,然后重复下一次提交。然后,您可以使每个提交成为一组有用或有意义的更改,即使它们发生在不同的文件中。我还建议为每个票证或类似活动创建一个新的分支,并使用
    签出
    (如果您不想在切换之前提交,可以使用
    git stash
    )在它们之间切换,尽管如果您正在做许多快速更改,这可能会很痛苦。不要忘记经常合并。

    您也可以使用git友好的文本编辑器。它们在已修改的行上显示颜色,添加行显示另一种颜色,删除行显示另一种颜色,等等

    一个很好的文本编辑器就是。

    git diff/filename
    
    路径可以是文件之前的完整系统路径或
    如果您在项目中,也可以粘贴修改后的文件路径

    对于具有路径的修改文件,请使用:
    git status

    好的,我的案例是当您不想关心文件列表时。让他们都看看

    当您已经运行了
    git时,使用文件列表添加

    $ git diff --cached $(git diff --cached --name-only)
    
    在较新版本的
    git
    中,还可以使用
    --staged
    ,它是
    --cached
    的同义词

    同样可以用于没有添加文件但没有
    --cached
    选项的文件

    $ git diff $(git diff --name-only)
    
    “缓存”选项的Git命令别名:


    转到各自的git repo,然后运行以下命令:

    git-diff文件名

    它将打开标记有更改的文件,按return/enter键向下滚动文件


    p.S.文件名应包括文件的完整路径,否则您可以通过进入文件的相应目录/文件夹来运行,而不需要完整的文件路径

    对于某些路径,其他答案将返回格式为
    致命:不明确参数的错误

    在这些情况下,diff需要一个分隔符来区分文件名参数和提交字符串。例如,要回答问题,您需要执行以下操作:

    $git diff--cached--
    
    这将显示修改后的文件与上次提交之间的更改

    另一方面:

    git diff——缓存头~3
    

    将显示本地版本与三次提交前的版本之间的更改。

    引号有点太多-默认情况下,它执行第一次比较:在工作树和索引之间。@sveilleux2否,只需运行git diff而不带任何参数-如答案的最后一句所述,如果没有给出路径,它将显示所有更改。(
    [filename]
    上的括号表示一个可选参数。)使用
    *
    可以让shell列出所有文件,因此如果您在子目录中,则只能在该子目录中获取内容(而不是整个repo),并且会错过隐藏文件中的更改。#显示当前提交和索引之间的差异#,您将要提交的git diff--cached[filename]不是指:#显示当前提交和索引之间的差异#即您将要推送的内容吗?git diff--cached[filename]要查看添加文件后(即“git add”之后)的差异,请执行“git diff--staged[filename]”哦,为什么这么复杂?!如果我们有几十个文件呢?。。只是向git接口抱怨。。。是的,似乎,<代码> Git Adpp-<代码>是检查所有文件的替代品。@ JeFuMy-请考虑在代码中添加<代码> Git DIF--分级[文件名] <代码>,因为这是一个经常需要的情况。因此,使用Git Addio-Git Addio-P代替Git添加文件名是分期的组合,查看您可以进行的更改,并以交互方式逐个选择它们。有关git的更多信息,请参阅add-p.git不处理更改——试着将其视为混乱和错误的主要来源。git处理快照。感谢您提供的详细信息git diff--cached--name only是我要查找的命令。。。。
    $ git diff --cached $(git diff --cached --name-only)
    
    $ git diff $(git diff --name-only)
    
    $ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'