当更改恢复其他更改时,列出一系列提交中的更改

Zig*_*saz 5 git diff commit

假设我有以下 git 存储库,其中在提交 #2 中添加了一个文件,并在提交 #3 中删除了文件:

commit de36dee94ab54ab61dd2c6e9164756c1a608bd13 (HEAD -> master)
Author: Keith <keith>
Date:   Tue Sep 25 09:57:45 2018 -0500

    #3

 foo.txt | 1 -
 1 file changed, 1 deletion(-)

commit 1fddf03367b9e2e4b65f96f4fc5db7d7d353f50c
Author: Keith <keith>
Date:   Tue Sep 25 09:57:37 2018 -0500

    #2

 foo.txt | 1 +
 1 file changed, 1 insertion(+)

commit 4ab9494db091077879a74a47f83fe568a7efd133
Author: Keith <keith>
Date:   Tue Sep 25 09:57:23 2018 -0500

    #1

 README.md | 1 +
 1 file changed, 1 insertion(+)
Run Code Online (Sandbox Code Playgroud)

现在假设我对提交 #1-#3范围内所做更改的摘要感兴趣。如果我简单地这样做git diff HEAD 4ab9494db,我将不会得到任何输出,因为存储库在开始和结束时处于相同的状态;我永远不会看到有一个文件foo.txt在该时间范围内出现和消失。我也可以git log --stat像上面那样做,但假设这是一个更大的回购协议,具有更长的历史,这可能会变得相当麻烦。

有没有办法获得所有已更改文件的简洁摘要,即使一个更改“抵消”了另一个更改?

kni*_*ttl 1

如果您只对文件名感兴趣:

git log --name-only --format='' | sort -u
Run Code Online (Sandbox Code Playgroud)

--name-only将输出提交补丁中更改(添加/删除/修改)的所有文件。