4

与此问题非常相似的问题:Export only modified and added files with folder structure in Git

给定的答案似乎只输出给定提交($commit_id)中更改的文件:

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id

我想获取 commit1 和 commit2 之间的修改文件列表...这可能吗?

4

2 回答 2

7

您应该只能使用提交 ID。例如:

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT 218d182e 3ef44d29d

如果要在提交中包含更改,3ef44d29d则需要通过 ID 或 with 指定其父级3ef44d29d^

这里有一些例子,来自我自己的一个项目。回顾历史,我有以下提交:

1a443
fb4ae
88226
c46ba

我从各种命令中得到以下输出:

$ git diff-tree -r --name-only 1a443
1a443831fa9f797fedb397e900bd3d45e2093ea6
public/customers.en.html
$ git diff-tree -r --name-only fb4ae
fb4ae4af0ac473b8547ec1717d4b4172c0d634f4
public/checkout.en.html
$ git diff-tree -r --name-only 88226
88226fec6f1082b1dffd266d3e1bd0dc38cca520
public/finish.en.html
$ git diff-tree -r --name-only c46bac
c46bacddee7785599c2f026f53cd93357e8ad30d
public/index.php

我可以很容易地得到所有的c46bac变化1a443

$ git diff-tree -r --name-only c46bac 1a443
public/checkout.en.html
public/customers.en.html
public/finish.en.html

但请注意,它不包括对public/index.phpcommit的更改c46bac。我们真正想要的是使用该提交的级作为我们比较的起点。

$ git diff-tree -r --name-only c46bac^ 1a443
public/checkout.en.html
public/customers.en.html
public/finish.en.html
public/index.php
于 2012-11-01T16:23:51.643 回答
0

git diff --name-only commit1..commit2

于 2013-12-19T16:02:42.953 回答