git:列出一天(或一周/一个月......)添加/修改的所有文件

Posted

技术标签:

【中文标题】git:列出一天(或一周/一个月......)添加/修改的所有文件【英文标题】:git: list all files added/modified on a day (or week/month...) 【发布时间】:2011-12-22 10:21:37 【问题描述】:

给定一个时间段(例如一天、一周、一个月),是否可以列出在这段时间内修改或添加的所有文件?

【问题讨论】:

感谢大家提供许多不同的解决方案!我想接受所有这些,因为它们都解决了我的问题。我接受@inger 的解决方案,因为我喜欢修改/添加指标... 实际上 --name-status 也适用于git log。也请不要回答我的答案,它指出了一个限制..很快就会澄清。 【参考方案1】:

我会使用 diff 直接生成文件列表,例如:

git diff --name-only "@3 days ago" "@2 days ago"

changelog.txt
newfile.txt

如果您想知道修改或添加了哪个文件,请改用 --name-status:

git diff --name-status "@3 days ago" "@2 days ago"

M       changelog.txt
A       newfile.txt

【讨论】:

请注意,@... 表示法可能不可靠——它的粒度可能比实际提交的粒度要粗得多——因为它使用 rev-log 条目将日期映射到提交,并且条目是仅添加到 your 操作的 rev-log 中(而不是,例如,对于 pull 中的每个提交)。 你是说reflog?无论如何,感谢您的提醒 - 我会使用 --since 和 --until 但这似乎并没有给出预期的结果。你知道更可靠的选择吗? 是的,reflog :)(啊,为什么你不能在 5 分钟后编辑 cmets...) 顺便说一句,不知道为什么你对--since--until 有问题(我猜你的意思是git log)——我用过它们,而且它们似乎始终以提交粒度给出预期的结果(即使在@... 没有的情况下)。 @manojlds 的回答对我来说看起来不错...... 不,我使用--since/--untilgit diff - 即使它似乎没有在手册页上宣传,它似乎也有效。对于这个用例,我更喜欢 diff:它更直接;我一直使用它来达到相同的目的,只是通常不用于日期。我有点认为两者应该产生相同的结果,我将检查这里是否存在 git log 管道作为解决方法的已知问题。【参考方案2】:

也许是这样的:

  git log --since="1 day ago" --name-only --pretty=format: | sort | uniq

如果您想要一天、一周等,请包括 --until

【讨论】:

您可以使用 -u:git log --since="1 day ago" --name-only --pretty=format: | sort -u .. 即使认为这仍然比简单的 git diff 更复杂 .. OTOH 可能对当前的 git 有问题(请参阅我的答案)厘米)。 不确定是否在此解决方案中使用 uniq。可能有相同数量的文件更改、插入和删除的不同提交,如果您通过 uniq 管道传输结果,这将消失。【参考方案3】:

我用它来获得一个干净的列表:

git whatchanged --since '04/14/2013' --until '05/22/2014' --oneline --name-only --pretty=format: | sort | uniq >> changedlist.txt

【讨论】:

如何运行类似的命令来查看自 2015 年 4 月 14 日至 2014 年 5 月 22 日或过去 7 天/周内哪些文件未更改?谢谢。 我在这里发布了一个答案:***.com/questions/31443727/…,它与这篇文章的要求相反,但它很有用。 git whatchanged 已弃用,而在当前版本的 Git 中鼓励使用 git log。 git-scm.com/docs/git-whatchanged/2.21.0【参考方案4】:

Git whatchanged 应该给你你想要的,列出修改了哪些文件。

这是一个使用 Git 源代码的示例:

$ git --version
git version 1.7.8.rc0.35.gee6df
$ git whatchanged --since '10/27/2011' --until '10/30/2011' --oneline
55e7c0a (squash) test for previous
:100755 100755 dbf623b... 53905a2... M  t/t8006-blame-textconv.sh
2564aa4 blame.c: Properly initialize strbuf after calling, textconv_object()
:100644 100644 173f286... e39d986... M  builtin/blame.c
e8e1c29 Update draft release notes to 1.7.8
:100644 100644 3045245... ddb8d37... M  Documentation/RelNotes/1.7.8.txt
8debf69 clone: Quote user supplied path in a single quote pair
:100644 100644 488f48e... efe8b6c... M  builtin/clone.c

【讨论】:

git whatchanged 已弃用,而在当前版本的 Git 中鼓励使用 git log。 git-scm.com/docs/git-whatchanged/2.21.0【参考方案5】:

这里还有一个没有空行的:

git log --after="2015-11-05T16:36:00-02:00" --before="2015-11-15T16:36:00-02:00" --pretty=format:"" --name-only | sed '/^\s*$/d' | sort | uniq -u

【讨论】:

【参考方案6】:

试试:

git log --since="2 days ago" --until="1 days ago"

如果您省略--until,您将获得最近两天的日志。您还可以指定周、月等。您还可以将 git diff 与 --since 和 --until 参数一起使用。稍微处理一下输出格式,你就完成了。

【讨论】:

【参考方案7】:

Git BASH 命令

git whatchanged --since '11/24/2017' --until '11/29/2017' --oneline --name-only --pretty=format: | sort | uniq >> changedlist.txt

【讨论】:

以上是关于git:列出一天(或一周/一个月......)添加/修改的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

MySql查询最近一个月,一周,一天

仅获取从一周的第一天到一周的当前日期的数据

我已经使用了 3 个按钮,一个用于一周,一个用于一个月,一个用于一天,如果单击一周按钮,应该禁用日和月

PHP怎么获得一天,一周,一个月的起始和结束的时间戳??求高人指点

python 第一周(第一天) 我的python成长记 一个月搞定python数据挖掘!

python 第一周(第一天) 我的python成长记 一个月搞定python数据挖掘!(02)