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/--until
和git 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:列出一天(或一周/一个月......)添加/修改的所有文件的主要内容,如果未能解决你的问题,请参考以下文章
我已经使用了 3 个按钮,一个用于一周,一个用于一个月,一个用于一天,如果单击一周按钮,应该禁用日和月
PHP怎么获得一天,一周,一个月的起始和结束的时间戳??求高人指点