Can I use git diff on untracked files?
Is it possible to ask git diff to include untracked files in its diff output? Or is my best bet to git add the new files I've created and the existing files I have edited, and use
git diff --cached
?
With recent git versions you can git add -N
the file (or --intent-to-add
), which adds a zero-length blob to the index at that location. The upshot is that your "untracked" file now becomes a modification to add all the content to this zero-length file, and that shows up in the "git diff" output.
git diff
echo "this is a new file" > new.txt
git diff
git add -N new.txt
git diff
diff --git a/new.txt b/new.txt
index e69de29..3b2aed8 100644
--- a/new.txt
+++ b/new.txt
@@ -0,0 +1 @@
+this is a new file
Sadly, as pointed out, you can't git stash
while you have an --intent-to-add
file pending like this. Although if you need to stash, you just add the new files and then stash them. Or you can use the emulation workaround:
git update-index --add --cacheinfo
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt
(setting up an alias is your friend here).
我相信你可以通过简单地将路径提供给两个文件来区分索引和未跟踪文件中的文件。
git diff --no-index tracked_file untracked_file
For my interactive day-to-day gitting (where I diff the working tree against the HEAD all the time, and would like to have untracked files included in the diff), add -N/--intent-to-add
is unusable, because it breaks git stash
.
So here's my git diff
replacement. It's not a particularly clean solution, but since I really only use it interactively, I'm OK with a hack:
d() {
if test "$#" = 0; then
(
git diff --color
git ls-files --others --exclude-standard |
while read -r i; do git diff --color -- /dev/null "$i"; done
) | `git config --get core.pager`
else
git diff "$@"
fi
}
Typing just d
will include untracked files in the diff (which is what I care about in my workflow), and d args...
will behave like regular git diff
.
Notes:
git diff
is really just individual diffs concatenated, so it's not possible to tell the d
output from a "real diff" -- except for the fact that all untracked files get sorted last. git diff
. If someone figures out how to do this, or if maybe a feature gets added to git
at some point in the future, please leave a note here! 上一篇: 你如何隐藏未跟踪的文件?