9

我使用以下 Git 命令

git diff-tree --no-commit-id --name-only -r <SHA>

获取已更改文件的列表。

不幸的是,该列表没有指定每个文件的更改类型:添加、修改或删除......等等

如何在特定提交的给定 SHA 中显示更改列表 [更改类型、文件名]。

4

5 回答 5

19

使用--name-status代替--name-only

git diff-tree --no-commit-id --name-status -r <SHA>

这将显示带有状态字母的文件名(从 man 中提取):Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had their pairing Broken (B).

于 2014-07-18T07:36:23.657 回答
6

虽然乔的回答指出您可以将--name-status标志与 一起使用git diff-tree,但您也可以将相同的标志与 一起使用git diff

要获取更改后的文件及其特定提交的状态,您可以使用该提交的 sha id 和 commit-parent 说明符,如下所示

git diff --name-status <sha>^ <sha>

修订说明符<sha>^表示 commit 的第一个父级<sha>,因此使用它可以git diff有效地为您提供在提交与其父级之间所做的所有更改。

选择

你也可以使用

git diff --name-status <sha>~ <sha>

where<sha>~也意味着 commit 的第一个父级<sha>

文档

于 2014-07-22T04:32:50.140 回答
4

利用

git whatchanged 

查看最后一次提交

于 2014-07-17T12:31:53.980 回答
1

感谢hvdstdcall 的回答的评论,

您的原始答案(包括git whatchanged SHA-1表单)几乎是正确的:添加-1选项以仅获取该特定提交。

以下是感兴趣的人的解决方案:

git whatchanged <SHA> -1

另一种解决方案是:

git diff-tree --no-commit-id -r <SHA>
于 2014-07-17T13:14:59.343 回答
1
git checkout <commit>
git whatchanged -1
于 2014-07-17T13:08:24.713 回答