如何在git中找到修改过的文件,即使使用还原的提交?

如何在git中找到修改过的文件,即使使用还原的提交?,git,Git,我在存储库中创建了一个标记,比如说v1.0.0。稍后有2个提交:第一个提交有一些更改,第二个提交有对更改的恢复。我想在标记后找到所有修改过的文件。 我试过: git diff --name-only v1.0.0 master 但是对于git diff没有任何更改-文件看起来是一样的。但我需要知道哪些文件被修改了,即使修改被恢复 来自曼吉特差异: git diff [--options] <commit> <commit> [--] [<path>...]

我在存储库中创建了一个标记,比如说v1.0.0。稍后有2个提交:第一个提交有一些更改,第二个提交有对更改的恢复。我想在标记后找到所有修改过的文件。 我试过:

git diff --name-only v1.0.0 master 

但是对于
git diff
没有任何更改-文件看起来是一样的。但我需要知道哪些文件被修改了,即使修改被恢复

来自
曼吉特差异

git diff [--options] <commit> <commit> [--] [<path>...]
  This is to view the changes between two arbitrary <commit>.
git diff[--options][--][…]
这是为了查看两个任意变量之间的变化。

因此,只需在进行更改之前输入此提交的名称以及进行更改的提交,然后就可以运行
git diff commit1 commit2

当恢复提交时,生成的差异将与原始提交不存在时相同,因此更改将不再存在

我认为试图看到一个还原的差异会给你一个错误的代码差异,这是没有任何意义的


如果您确实想要这些更改(它们不必还原),您可以还原还原提交。

最接近的解决方案可能是
git log--oneline--stat v1.0.0..master
。这将打印提交列表,以及它们所涉及的文件:

b1be31 Revert "test commit"
 fileA | 1 -
 1 file changed, 1 deletion(-)
23faef another commit
 fileB | 2 +
 fileC | 3 +
 2 files changed, 5 insertions(+)
0821dea test commit
 fileA | 1 +
 1 file changed, 1 insertion(+)
由于列出了每个提交,还原的更改将可见(两次,首先是原始提交,然后是还原提交)


如果您只需要一个文件名列表,则必须通过某种脚本对其进行过滤,但对于快速获取列表来说,这可能就足够了。如果您开始编写脚本,您可能希望查看管道命令以获得更容易解析的内容…

我在internet上搜索这个问题,但什么也没有得到。最后我使用这个方法:

git log commit1..commit2 --format="" --name-only | sort | uniq

重要的是,它可以工作。

是手动恢复更改(通过编辑代码),还是通过实际恢复提交?这两种方法都有可能(许多人正在处理此项目)。不正确。您可能混淆了“恢复”和“重设基础”。还原的提交仍然作为常规提交存在-只是稍后的提交将其还原。不,我没有混合,但我说的是错误的。我的意思是,如果一个提交被还原,在最终的差异中,原始提交的更改将不在这里(还原的目的)。但承诺确实会在这里。最后的差异将与原始提交从未完成(因此也没有恢复)一样。是的,这是正确的。但这不是你在回答中写的:-)。我试图改写它,但仍然不确定它在结果中听起来是否正确。我会在休息后再考虑。这可能对OP没有帮助。他/她似乎想知道哪些文件被更改,即使这些更改后来被还原。这就是
--name only
选项的作用,就像OP中一样。带有该选项的输出也正是OP要求的:文件列表。是的,
--name only
将列出文件名。但是,如果更改被还原,您的命令不会将文件列为已更改的文件,这是OP想要的。如果更改是在一次提交中进行的,而在另一次提交中被还原,我看不出这将如何不列出这些更改。它只是要求您提前知道涉及哪些提交,但OP没有具体说明这一点。正是我的观点:看起来OP只有一个标记和
master
,并且希望看到其间所有文件都发生了更改,即使更改被还原。但你是对的,问题并不完全清楚。