如果我运行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
这段代码没有任何输出!
我期望看到像 + 第一行
这样的变化,但是实际上什么也没有。它没有告诉我发生了什么。Stack Overflow 上的人告诉我添加一些文件,所以我执行了git add
操作:
$ git add .
$ git diff
仍然没有显示任何内容!
Git GUI 显示更改。
git status -v
显示更改。
但由于某些原因,git diff
没有显示任何内容。
所以我的问题是:
- 用简单的语言,
git diff
如何工作? - 如何显示我所做的所有更改的差异(未暂存和已暂存)?
我公司的一些人正在使用 Git,但 SVN 的人群会将此视为 Git 过于混乱而无法使用的案例。
git status
列出了未跟踪的更改文件,而git log
正常工作。只有git diff
不起作用。我在一个完全不同的仓库上使用64位Windows机器也得到了相同的结果。我正确地认为没有参数的git diff
应该显示当前文件系统状态和最后一次提交之间的差异吗? - blokeleygit status
中只列出未跟踪的文件,则没有更改。您能否将git status
的输出添加到您的问题中? - m0tivegit diff
会将工作目录与索引(已暂存的更改)进行比较,但它似乎根本不这样做。看起来git diff
完全忽略了任何没有使用git add
添加的文件。我觉得这非常令人困惑。 - blokeleygit add .
然后git status -v
。但我仍然不知道git diff
到底是干什么的。 - blokeleygit diff
列出了版本控制之内的文件更改。在将它们添加到版本控制之前,git将把文件视为在版本控制之外,并将它们视为“未跟踪”,因此在执行差异时会忽略它们... - m0tive