git diff不提供输出

如果我运行git diff我希望看到我的工作目录相对于以前提交的任何内容(如果是没有提交的新回购,那么工作目录内容的列表)会发生一系列更改。 试试这个例子:

$ mkdir temp
$ cd temp
$ git init
$ echo "first line" > test.txt
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test.txt
nothing added to commit but untracked files present (use "git add" to track)

我们来看看test.txt的差异:

$ git diff

这没有输出!

我期望看到像+ first line那样的差异,但是我什么也得不到。 它并没有告诉我发生了什么事。 在stackoverflow的人告诉我git add一些文件,所以我这样做:

$ git add .
$ git diff

依然没有!

Git GUI显示更改。

git status -v显示更改。

但由于某种原因, git diff没有显示任何内容。

所以我的问题是:

  • 用简单的英语, git diff工作的?
  • 我如何显示所做的所有更改(未暂存和暂存)的差异?
  • 我公司的一些人使用git,但是SVN人群会指出这是git太混乱而无法使用的情况。


    为什么在添加之前没有得到git diff?

    git不会将文件系统上的文件视为自动包含在版本控制系统中,而必须将其明确添加到git存储库中(就像通过使用git add .当前目录一样)。

    git diff没有输出,因为git 你的版本库中没有看到任何变化,只有在版本库之外的文件,它认为是'未被跟踪'的,并且在生成diff时被忽略。

    我发现这个与svn一样的vcs关键区别之一(与分段和忽略目录一起)。

    如果你想包含未跟踪的文件, git add它们。

    如果你不希望他们在你回购添加他们给你的.gitignore (见git ignore --help )。 这对C目标文件或python .pyc文件很有用。

    为什么添加后无法获得git diff?

    所以这有些不同。 如果你做git status你会看到文件现在在暂存区域。 这是您即将提交的文件的区域。

    当你在git add一个新文件时,它会跳过工作副本并直接进入暂存区域。 这是有道理的,无论是追踪还是未追踪, git add都会将文件移入暂存区域。

    要查看上次签入和暂存区域之间的差异,请执行git diff --cached

    要查看暂存区域和工作副本之间的差异,请执行git diff 。 如果暂存区域中没有任何内容,则与最后一次签入和工作副本之间的差异相同。


    我已经看到了真的应该git diff输出但没有的情况。 加入
    --no-pager gitdiff之间的无页面工作:

    git --no-pager diff
    

    ...因此,明确地设置寻呼机不less

    git config --global core.pager 'less'
    

    即使less应该是默认寻呼机。

    这是在Ubuntu 12.04 LTS中。 我只是为了防止出现同样问题的其他人来寻找解决方案并且上述内容不回答问题而添加此内容。

    我在git文档中找到了关于寻呼机设置的信息。


    基于你的git status输出,没有附加参数,没有任何东西可以显示git diff 。 对于git diff --cachedgit diff HEAD ,没有什么可以显示的,因为所有这些命令都依赖于git已知的更改。

    您现在没有阶段性文件,也没有来自受版本控制的文件的更改文件。

    git控制下添加test.txt ,您将获得所需的输出。

    只需键入

    git add test.txt
    

    要么

    git add .
    

    比这个文件将在版本控制下添加。 而这个文件的未来变化将由git diff显示。

    链接地址: http://www.djcxy.com/p/36255.html

    上一篇: git diff gives no output

    下一篇: How to undo 'git add' before commit?