如何使用git获取已更改的文件的唯一列表?我正在寻找专门修改或添加的文件。
这个命令还不错,但它有点过于冗长 - 我不关心它所属的提交,而且它也不是唯一的 - 如果同一个文件被更改了在多次提交中,它被列出两次。
git log --name-status --oneline
- e5a7926更改测试的措辞
| M spec / entities / agent_evaluator_spec.rb- 7b2a81c实施自动转置功能
| M lib / scoring / entities / agent_evaluator.rb
| M spec / entities / agent_evaluator_spec.rb
| M spec / services / agent_evaluation_spec.rb- a5de237将unused_players添加到agent_evaluation规格中 | M spec / entities / agent_evaluator_spec.rb
| M spec / services / agent_evaluation_spec.rb
| M spec / support / factory_helpers.rb- 083757c重构代理服务规范
| M spec / services / agent_service_spec.rb
| M spec / support / editor_service_stub.rb
我正在寻找类似的东西:
规格/实体/ agent_evaluator_spec.rb
LIB /得分/实体/ agent_evaluator.rb
投机/服务/ agent_evaluation_spec.rb
规格/支持/ factory_helpers.rb
投机/服务/ agent_service_spec.rb
规格/支持/ editor_service_stub.rb
...
答案 0 :(得分:2)
目前还没有办法将git-log限制为只更改所有文件名的列表而不查看提交历史记录。但是,你当然可以删除你不关心的东西。例如:
git whatchanged --oneline --name-only |
grep --extended-regexp --invert-match '^[[:xdigit:]]{7,}'
这将显示历史记录,包括每次提交中更改的文件名,然后egrep将删除所有提交ID和提交摘要。这使您只需在每次提交期间更改的文件名列表,而无需伴随提交历史记录。
答案 1 :(得分:2)
与CodeGnome's answer相似但略有不同:
git log --pretty=format: --name-only $more_options | grep . | sort -u
对于$more_options
,您可能需要:
--diff-filter=M
或:
--diff-filter=AM --no-renames
或类似的东西。 --diff-filter
使用您--name-status
看到的状态来禁止或包含特定条目。 (有关详细信息,请参阅git diff
documentation。)因为即使使用--pretty=format:
(空格式)也会输出日志消息的空白行,我们会引入grep .
以仅使用至少一行字符,然后我们通过sort -u
运行生成的文件名,以获得uniq
- 结果。