如何在git存储库中获取不同版本之间更改的文件列表?

如何在git存储库中获取不同版本之间更改的文件列表?,git,Git,我需要获得从最初提交到最近提交的所有更改文件的列表 因此,我的情况如下: $ git init . $ echo "test1" > test1 $ git add test1 $ git commit -m "test 1" $ echo "test2" > test2 $ git add test2 $ git commit -m "test 2" $ echo "test3"

我需要获得从最初提交到最近提交的所有更改文件的列表

因此,我的情况如下:

$ git init .
$ echo "test1" > test1
$ git add test1
$ git commit -m "test 1" 
$ echo "test2" > test2
$ git add test2
$ git commit -m "test 2"
$ echo "test3" > test3
$ git add test3
$ git commit -m "test 3"

$ git log 
commit 13b72d5468dfbb9582ad4d225cf1e6e8bb17f1bc (HEAD -> master)
Author: carlspring <...>
Date:   Fri Feb 12 18:58:58 2021 +0000

    test 3

commit 6955a875fdf57efaa3859827b7f975fa26095d38
Author: carlspring <...>
Date:   Fri Feb 12 18:58:56 2021 +0000

    test 2

commit 9410cf6a98986794c8ffe38c15cc60eaa054705c
Author: carlspring <...>
Date:   Fri Feb 12 18:58:56 2021 +0000

    test 1
carlspring@carlspring:/tmp/test$ git log --all --full-history --pretty=%H
13b72d5468dfbb9582ad4d225cf1e6e8bb17f1bc
6955a875fdf57efaa3859827b7f975fa26095d38
9410cf6a98986794c8ffe38c15cc60eaa054705c

现在,我已经看到了这里推荐使用
git diff tree
的所有答案,所以我尝试了一下:

$ git diff-tree --no-commit-id --name-only -r 9410cf6a98986794c8ffe38c15cc60eaa054705c..HEAD
test2
test3


为什么我没有得到
test1
呢?

您应该能够通过使用git空树id来实现这一点:

$ git diff --name-only  4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
test1
test2
test3

test1
已经是第一次提交的一部分,因此它不是“在第一次提交和头之间”更改的文件。您可以从一开始就用一个空的提交开始,然后在一个单独的提交中添加
test1
,然后它就会显示出来。@JoachimSauer:好吧,这最终将针对一个具有实际历史的存储库执行。在这种情况下,如何执行此操作?您可以在没有父对象的情况下创建一个新的空提交,因为这只比较
对象,所以不必关心这两个对象是否共享任何历史记录。因此,您的合成空提交可以与HEAD进行比较,它将列出所有不同的文件(根据定义,这些文件将是HEAD中的所有文件)。您链接到的答案显示的是差异,而不是所有更改文件的列表。非常简短,贴切,切中要害@卡尔斯普林:它又短又尖;但你说真正的回购协议会有历史,这不会只列出你在那种情况下更改的文件。我不确定我是否明白你所说的@MarkAdelsberger。它列出了初始提交前更改的文件列表和当前的
。根据给定的示例,这似乎是必需的:@tftd我想说的是OP写了一篇评论,他们在评论中说,另一个与此等效的解决方案将不起作用,因为“这最终将针对具有实际历史的存储库执行。”您提供的内容没有显示更改;它显示最终提交的全部内容。
git commit--allow empty
as@Joachim建议与
git diff--name only 4B825DC642CB6EB9A060E54BF8D6928FBEE4904 HEAD
不同。第一个命令将实际创建提交,而第二个命令不会。至于引用的评论,我觉得你可能误解了。当您有一个现有的回购协议时,您将如何从一开始就以空提交开始,并在单独的提交中添加test1?它只适用于新创建的存储库?我的理解是基于一个例子,这个例子表明他想要更改文件的完整列表
空树..HEAD
:)
$ git diff --name-only  4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
test1
test2
test3