列出 git 中提交所触及的所有文件

Ada*_*cki 4 git git-diff git-log

如何列出两次提交之间“触及”的所有文件?我正在寻找一个类似于git diff COMMIT1..COMMIT2 --name-only但包括稍后修改和恢复的文件的命令。

例如,假设我有一个包含一系列提交(线性历史)的存储库:C0<-C1<-C2<-C3<-C4。提交 C1 引入了一个新文件 F,然后提交 C3 将其从存储库中删除。我正在寻找一个命令,给定 C0 和 C4,它会告诉我中间有一个文件 F。即使 C0 和 C4 中没有这样的文件。因此git diff根本不会提及文件F。

Rom*_*eri 5

git diff ref1 ref2只考虑给定的提交,是的,但git log会找到缺少的步骤并列出每个步骤的文件,这sort将聚合:

git log --pretty=format: --name-only COMMIT1..COMMIT2 | sort -u
Run Code Online (Sandbox Code Playgroud)

  • 您很可能意味着 `--pretty=` 而不是 `--pretty-format=""`。 (2认同)
  • @fluffy:`--pretty` 接受一个*名称*(短、中、完整、更完整等),然后生成格式,您可以在 Git 配置中定义自己的格式;`--pretty=format:...` 和 `--pretty=tformat:...` 直接指定格式。所以它们经历了相当不同的代码路径。换行符是由“format”引入的,而不是由“tformat”引入的。这有点奇怪,因为“tformat”确保在需要时由换行符终止(!)。(注意:要定义您自己的“--pretty”格式,请使用“pretty.foo=%h %ae %s”,然后“--pretty=foo”使用它。) (2认同)