【发布时间】:2012-01-22 13:44:44
【问题描述】:
如果我运行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 太混乱而无法使用的一个案例。
【问题讨论】:
-
您确定从有效的存储库运行命令吗? MSYSGit diff 确实可以正常工作。
-
git repo 有效:
git status列出了未跟踪的更改文件,git log工作正常。只是git diff不起作用。我在完全不同的 repo 上的 64 位 Windows 机器上也得到了相同的结果。我是对的,不带参数的git diff应该显示当前文件系统状态和上次提交之间的差异? -
如果
git status中只有未跟踪的文件,则不会有任何更改。您能否将git status的输出添加到您的问题中? -
test.txt 是一个全新的文件,还是您已经将它的先前版本提交到您的 Git 存储库?
-
git 不会将文件系统上的文件视为自动包含在版本控制系统中,您必须将内容显式添加到 git 存储库中(就像您通过使用
git add .添加当前目录所做的那样) .git diff给出了内部版本控制的文件的变化。直到您将它们添加到版本控制中,git 将它们视为 外部,将文件视为“未跟踪”,因此在进行差异时会忽略它们...
标签: git