是否有可能要求git diff在其diff输出中包括未跟踪的文件,或者我最好的选择是使用git添加新创建的文件和我编辑过的现有文件,然后使用:

git diff --cached

?


当前回答

更新:我的答案是阶段性和非阶段性的变化。不被追踪和不被追踪。查看已跟踪/未跟踪信息的可接受答案。留给子孙后代。

下面只会给你非阶段性的变化:

$ git diff

如果你想要阶段性和非阶段性的变化,在命令中添加HEAD:

$ git diff HEAD

其他回答

我相信您可以通过简单地提供两个文件的路径来区分索引文件和未跟踪文件中的文件。

git diff --no-index tracked_file untracked_file

更新:我的答案是阶段性和非阶段性的变化。不被追踪和不被追踪。查看已跟踪/未跟踪信息的可接受答案。留给子孙后代。

下面只会给你非阶段性的变化:

$ git diff

如果你想要阶段性和非阶段性的变化,在命令中添加HEAD:

$ git diff HEAD

这对我来说很管用:

git add my_file.txt
git diff --cached my_file.txt
git reset my_file.txt

最后一步是可选的,它将使文件保持之前的状态(未跟踪)

如果你正在创建一个补丁也有用:

  git diff --cached my_file.txt > my_file-patch.patch
git add -A
git diff HEAD

生成补丁,如果需要,然后:

git reset HEAD

在最新的git版本中,您可以git add -N the file(或——intent-to-add),这将在该位置的索引中添加一个零长度的blob。结果是,您的“未跟踪”文件现在变成了一个修改,将所有内容添加到这个零长度文件中,并显示在“git diff”输出中。

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

不幸的是,正如所指出的,当你有一个——intent-to-add文件挂起时,你不能git stash。虽然如果你需要隐藏,你只需要添加新文件,然后隐藏它们。或者您可以使用仿真解决方案:

git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt

(在这里设置别名是你的朋友)。