git diff没有输出

blo*_*ley 46 git

如果我运行,git diff我希望看到我的工作目录相对于之前提交的任何更改的列表(或者工作目录内容列表,如果它是一个没有提交的新repo).试试这个例子:

$ 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)
Run Code Online (Sandbox Code Playgroud)

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

$ git diff
Run Code Online (Sandbox Code Playgroud)

这没有输出!

我希望看到一个差异,+ first line但我什么都没得到.它没有告诉我发生了什么.stackoverflow上的人告诉我git add一些文件,所以我这样做:

$ git add .
$ git diff
Run Code Online (Sandbox Code Playgroud)

依然没有!

Git GUI显示了这些变化.

git status -v 显示更改.

但由于某种原因git diff没有显示任何东西.

所以我的问题是:

  1. 用简单的英语怎么样git diff
  2. 如何显示我所做的所有更改(未分阶段和上演)的差异?

我公司的一些人正在使用git,但SVN人群将指出这是git太混乱无法使用的情况.

m0t*_*ive 64

为什么在添加之前没有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 repo时,它会跳过工作副本并直接进入暂存区域.这在某种程度上是有意义的,git add无论是跟踪还是未跟踪,始终将文件移动到临时区域.

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

要查看暂存区域和工作副本之间的差异,请执行此操作git diff.如果暂存区域中没有任何内容,那么这与在上次签入和工作副本之间进行差异相同.

  • 它可以在命令 git reset --soft 之后。因此,不要使用数千个单词,而是使用 `git diff --cached`。 (3认同)

Dan*_*aum 28

我已经看到了确实应该输出的情况,git diff但没有;
--no-pager在两者之间加入gitdiffDOES工作:

git --no-pager diff
Run Code Online (Sandbox Code Playgroud)

......所以没有明确设置寻呼机是less

git config --global core.pager 'less'
Run Code Online (Sandbox Code Playgroud)

即使less应该是默认的寻呼机.

这是在Ubuntu 12.04 LTS.我只是添加这个以防其他有相同问题的人来寻找解决方案,而上述内容并没有回答这个问题.

我在git docs中找到了有关寻呼机设置的信息 .

  • 我也可以通过执行git config --global core.pager来使其工作。 (2认同)

Blu*_*zee 5

1.用简单的英语来说,git diff 是如何工作的?

如何git diff工作完全取决于您传递给它的参数。

根据参数,git diff将显示两次提交之间或提交与工作树之间的更改等...

例如,git diffgit diff --stagedgit diff HEAD在下文进一步描述。

2.如何显示我所做的所有更改(未暂存和暂存)的差异?

通过同时使用命令git diff HEADgit diff --staged.

但是对于刚刚创建的存储库git init,这个问题没有意义并且git diff HEAD不能使用:历史是空的,没有提交,HEAD还没有!


  • git diff显示相对于上次提交的工作树中的更改,仅适用于跟踪文件

  • git diff HEAD 显示相对于上次提交的工作树中的更改(包括未跟踪的文件)

  • git diff --staged(或其同义词git diff --cached)显示您为下一次提交相对于上次提交所做的更改

还有许多其他方法可以调用git diff,用于比较任意提交或分支等。调用git help diff以了解更多信息。