我正在尝试从特定提交开始在特定分支上提取git中所有已更改的文件。
我不在乎祖先,只是可以从HEAD到达。
本质上,我正在尝试构建自提交X之后已更新,修改和删除的文件的列表(因为这意味着日期/时间),所以我可以使用这些文件。
我不在乎提交B在技术上是否可以从提交A到达。我只关心提交B是在提交A之后提交的,并且可以从HEAD到达。
思考我正在做什么的另一种方法是,我想对自从特定提交被推送的日期/时间以来在git repo中添加或修改的每个文件执行cp -R。
当前我正在执行以下操作,但它对我而言并不正确:
git log --pretty=oneline --ancestry-path 05de9827fe31905b7ef98f3bbe331e922977de4d..master --date-order
任何人都可以给我有关如何执行此操作的提示/技巧吗?我所读到的有关2点和3点表示法的所有内容都是根据可访问性排除事物,而这并不是我想要的。
但是,我也不是最强的git人,因此,如果我误解了,我很乐意接受这一方面的教育。
答案 0 :(得分:2)
可能的快捷方式:请记住,提交是完整快照。 master
提示中所有与提交A
中不同的文件都可以通过提交git diff
与提示中的简单A
来观察master
的提交。参见Jake Worth's answer。这不会显示已更改的文件,然后 back; 更改以获取这些文件,请继续阅读。
您是正确的,--ancestry-path
所做的事情与众不同:
...--o--A--*--*--*--* <-- master
/
...--o--o--o
下一行提交不是提交A
的后代,而是被删除的,而是master
顶端的祖先,您可能希望包含它们。
请记住,每个提交中有两个日期和时间戳。这是作者日期和提交者日期。 1 git log --pretty=fuller
将显示每次提交的两个时间戳。
您可以使用--since
或--min-age
将修订遍历限制为 committer 时间戳大于某个最小值的提交。如果您对作者日期感兴趣,则(更)困难(git rev-list
使其无法使用作者日期)。
我只关心提交B在提交A之后被推送,并且可以从HEAD到达。
没有可用的“后推”日期,因为提交中没有“后推”日期。可以在五年前进行提交(因此其提交者日期为2014年),并在今天推送。 (您也可以伪造提交者日期,当然,即使您不伪造它,也要取决于计算机的时钟是否正确。)但是总的来说,人们不会弄乱他们的提交者时间戳,因此,如果您信任那些足够好,您可以使用它们。
所有这些,您需要首先从提交A
中提取提交者时间戳:
git log --no-walk --pretty=format:%ci A
将以ISO-8601格式检索提交者时间戳。有关各种选择,请参见the git log
documentation PRETTY FORMATS section中的格式指令列表。 --since
日期解析器采用许多输入形式。
(请注意时区问题,但是我忘记了Git实际上是如何处理时区问题的。)
1 作者日期旨在建议何时首次进行更改。提交者日期用于保留创建该特定提交的时间,该特定提交由提交的哈希ID标识。这两个时间戳最初是相同的,但是如果您重新设置基准或git cherry-pick
某个提交,则它会保留其作者日期,而在重新设置基准或进行自动选择复制时会获得一个新的(当前)提交日期(还会获得一个新的提交哈希ID)。
由于所有这些,如果一个提交是在一个月前首次编写的,但是在今天被提交之前必须进行几次修改,那么它的作者日期将是一个月大,而提交者的日期是“今天”。 ”。因此,找到committer-date≥author-date是很典型的。
答案 1 :(得分:0)
我不确定这是否是您要查找的内容,但是{{1将支持“我正在尝试构建自提交X之后已被更新,修改和删除的文件的列表” }},从您想回溯的任何提交中运行:
--name-only