如果我运行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)
让我们看看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太混乱无法使用的情况。
答案 0 :(得分:63)
git不会将文件系统上的文件视为自动包含在版本控制系统中,您必须将内容明确地添加到git存储库中(正如您通过添加当前目录git add .
所做的那样)。
git diff
没有输出,因为git看不到您的存储库中 的更改,只有文件 存储库,它认为“未跟踪”等等在生成差异时忽略。
我发现这与vcs的关键区别之一就像svn一样(以及暂存和忽略目录)。
如果您希望包含未跟踪的文件,请git add
。
如果您不想在回购邮件中将其添加到.gitignore
(请参阅git ignore --help
)。这适用于C对象文件或python .pyc
文件。
所以这略有不同。如果您执行git status
,您将看到该文件现在位于暂存区域。这是您要提交的文件的区域。
当您将git add
新文件放入git repo时,它会跳过工作副本并直接进入暂存区域。这在某种程度上是有道理的,git add
始终将文件移动到临时区域,无论是跟踪还是未跟踪。
要查看上次检入和暂存区域之间的差异,请执行git diff --cached
。
要查看暂存区域和工作副本之间的差异,请执行git diff
。如果暂存区域中没有任何内容,那么这与在上次签入和工作副本之间进行差异相同。
答案 1 :(得分:25)
我见过git diff
确实应该输出的情况但没有;加入
在--no-pager
和git
之间diff
工作:
git --no-pager diff
...使用
明确将寻呼机设置为less
git config --global core.pager 'less'
即使less
应该是默认的寻呼机。
这是在Ubuntu 12.04 LTS中。我只是添加这个以防其他有相同问题的人来寻找解决方案而且上面没有回答这个问题。
我找到了有关寻呼机设置的信息 the git docs
答案 2 :(得分:3)
根据您的git status
输出,没有其他参数,git diff
无法显示任何内容。 git diff --cached
和git diff HEAD
没有显示任何内容,因为所有这些命令都依赖于git已知的更改。
您现在没有暂存文件,也没有更改过的版本控制文件。
在test.txt
控件下添加git
后,您将获得所需的输出。
输入
git add test.txt
或
git add .
这个文件将在版本控制下添加。此文件的未来更改将通过git diff。
显示答案 3 :(得分:3)
1.如何用简单的英语,git diff工作吗?
git diff
如何运作取决于您传递给它的参数。
根据参数,git diff
将显示两次提交之间或提交与工作树之间的更改等...
例如,git diff
,git diff --staged
和git diff HEAD
将在下面进一步说明。
2.如何展示我所做的所有变更(未分期和上演)?
使用命令git diff HEAD
和git diff --staged
。
但是对于刚刚使用git init
创建的存储库,问题并没有真正意义,并且git diff HEAD
无法使用:历史记录是空的,那里没有提交但没有HEAD
!
git diff
显示工作树相对于上次提交的更改,仅针对跟踪的文件
git diff HEAD
显示工作树相对于上次提交的更改(包括未跟踪的文件)
git diff --staged
(或其同义词git diff --cached
)显示您为下一次提交而上次提交的更改
还有许多其他方法可以调用git diff
,用于比较任意提交或分支等。调用git help diff
以了解更多信息。
答案 4 :(得分:2)
我有一个LESS=-R
环境变量集。它使git diff
显示为空白屏幕。
我的解决方案:
unset LESS
答案 5 :(得分:1)
这确实与寻呼机设置有关。
我发现在
中包含'-e'export PAGER=less LESS=-cse
帮助。
如果没有'-e',less
将退出第一页。
在某种程度上,git甚至不会在这种情况下显示输出。
答案 6 :(得分:1)
存储后无法使用Git差异
有人像我一样尝试应用隐藏的更改后可能会遇到此问题。
git pull
,然后再更新git stash apply
(可能存在合并冲突)在这一点上,只需再次存储您的更改(git stash
),执行git pull
以确保所有内容都是最新的(因为我对此抱有偏执),请再次检查所有文件是否已更新日期在工作目录中(如果要处理远程/本地,则可能运行rsync),然后再次尝试git stash apply
,它应该可以工作!
为回答原始问题 ,git diff
没有显示任何内容,因为您有一个全新的目录,带有一个新添加的文件,但是是git diff显示的文件中的零更改。 git status
显示您已添加新文件,而git diff
用于显示文件中的更改。如果您对文件进行了更改,将其提交,然后对其进行了其他更改并运行git diff
,它将向您显示对该文件的更改。
答案 7 :(得分:0)
您不需要任何其他标志即可使git diff起作用。首先,您创建一个文件,并将其添加到git repo中,并使用git add进行登台,或者执行git commit使其进入存储库。现在,转到文件并对其进行更改并保存。只需在其中添加一个句子,说明“保存后我将立即运行“ git diff”命令”。保存。到那时,您将在运行git diff命令时看到差异。它将显示在执行“ git commit”之前或者如果您只是最初将文件放入暂存阶段的最新更改。
\TestGit>git diff File2.txt
diff --git a/File2.txt b/File2.txt
index e2ba019..eff7299 100644
--- a/File2.txt
+++ b/File2.txt
@@ -6,4 +6,6 @@ File two. Which is the second file that I will NOT add with the first file File1
The goal here is to add the File1 but not the File 2
-using git add File1.txt
\ No newline at end of file
+using git add File1.txt.
+
+So far I have just done a git add on this file.
\ No newline at end of file
带有+号的行是添加的内容。如果使用--cached标志并获取结果,则同一文件的git状态应报告该文件尚未提交。提交文件后,将不会获得git diff的任何输出。即使带有--cached标志。
答案 8 :(得分:0)
首先,我建议您在使用“ git diff”命令进行更改之前保存文件。