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

git diff --cached

?


当前回答

这对我来说很管用:

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 diff origin/master

不是100%的重点,但如果出于某种原因,你不想把你的文件添加到索引中,这是另一个选择:

如果文件是未跟踪的,显然diff是整个文件,所以你可以用less查看它们:

less $(git ls-files --others --exclude-standard)

在它们之间导航:n和:p为下一个和前一个..

从评论更新:如果你需要一个补丁格式,你也可以结合git diff:

git ls-files --others --exclude-standard -z | xargs -0 -n 1 git --no-pager diff /dev/null | less

在这种情况下,还可以将输出重定向到文件或使用其他diff命令。

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

git diff --no-index tracked_file untracked_file

这对我来说很管用:

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 diff

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

$ git diff HEAD