如何告诉 `git diff <commit>` 比较曾经被跟踪但现在未跟踪的文件?

7

如果我想要查看<commit>和工作目录(WD)之间的差异,我运行以下命令:

% git diff <commit>

这通常可以满足我的需求,但如果WD包含在创建<commit>时正在跟踪的文件,但现在(或当前分支中)没有被跟踪,则生成的差异将把这些文件视为/dev/null
我可以想象出一些情况下这可能是适当的行为,但目前我想能够使用在创建<commit>时正在跟踪的文件列表,查看<commit>和当前目录之间的“真实”差异。
有没有一种方法可以指示git diff以这种方式运作?
编辑:如果有一种方法可以仅存储(并稍后恢复)索引,那么在git diff <commit>之前运行git reset <commit>可能会产生<commit>和WD之间的完整比较,但我还没有弄清楚如何选择性地存储(并稍后恢复)索引...哦!我猜我可以像这样做一个“穷人的存储”:cp -a .git/index .git/index.bak!?
2个回答

2

您可以使用

git diff --diff-filter=M

仅显示修改过的文件,而不显示已删除的文件


谢谢,但我不想忽略那些新的“未被跟踪”的文件; 我想用 git diff 将它们与 <commit> 中的对应文件进行比较。 - kjo

0
创建一个临时的虚拟提交,保存当前工作树的状态,并与其进行比较,这个方案怎么样?类似于:
$ git checkout -b working-tree-state
$ git add -f .
$ git commit -m "The current working tree state"
$ git diff <commit>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接