在给定一段时间(例如一天、一周或一个月)内,是否可以列出所有在此期间修改或添加的文件?
我会使用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
--since
和 --until
(我猜你是指 git log
)时遇到了问题——我经常使用它们,它们似乎总是按照提交粒度给出预期的结果(即使在 @{...}
无法使用的情况下)。@manojlds 的回答对我来说看起来很不错。 - snogglethorpegit diff
的 --since/--until
参数,尽管在 man 手册中没有宣传,但似乎仍然有效。对于这种用例,我更喜欢使用 diff:它更直接;我一直在使用它来完成相同的任务,只是通常不带日期。我认为两者应该产生相同的结果,我将检查是否存在已知问题,并采取 git log 管道作为解决方法。 - inger git log --since="1 day ago" --name-only --pretty=format: | sort | uniq
如果想要指定一天、一周等时间段,则包含 --until
。
git log --since="1 day ago" --name-only --pretty=format: | sort -u
。尽管这比简单的 git diff
更复杂,但另一方面,它可能会在当前的 git 中出现问题(请参见我的回答评论)。 - ingergit whatchanged --since '04/14/2013' --until '05/22/2014' --oneline --name-only --pretty=format: | sort | uniq >> changedlist.txt
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 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
--until
,则会获取最近两天的日志。您还可以指定周、月等。您也可以使用带有--since和--until参数的git diff。稍微调整一下输出格式即可完成。git whatchanged --since '11/24/2017' --until '11/29/2017' --oneline --name-only --pretty=format: | sort | uniq >> changedlist.txt
git log
。另外请注意我的答案中的评论,指出了一个限制...很快会澄清。 - inger