例如,我想做以下事情......
$ git tag -a v1.0 [-d 2012-01-01] -m 'the demo version from January 1, 2011'
...并让标签反映该日期所有提交的存储库。
答案 0 :(得分:3)
根据Jefromi的观察,你需要从日志或转录列表中提供日期(大多数人使用日志,所以我会在这里使用)
git log --format=%H --before='2011-01-01' -1 | xargs git tag v1.0
-1表示提交一个。
答案 1 :(得分:2)
请注意,您实际上是在寻找棘手的东西。假设B
表示在相关日期之前提交的提交,而A
表示在该日期之后提交的提交,并且您的历史记录如下所示:
- B - B - B - A - A - A - A
\ /
B - B - A - A
你想要你的标签?可能在合并提交。定义已经很棘手了。现在假设合并更复杂,在给定日期之前做出的一些提交直到之后才被推送到中央仓库,依此类推。你可以提出一个定义,但它并不简单,也不是以任何方式构建到Git中的概念。
当然,如果您的历史记录是线性的,并且您并不担心发布内容的时间,那么您可以轻松找到这样的提交内容:
git rev-list --before='2012-01-01' -n 1 <branch>
(还有--after
,查找给定日期之后的所有提交。)
无论如何,这有点不合适;你应该用标签真正瞄准的是标记版本,里程碑,稳定点,发布或分发的版本等等。当然,最好在它们出现时对它们进行标记,但是你仍然可以弄清楚过去的版本。这些标签实际上很有用。
如果您仍想尝试制作追溯的基于日期的标签,而且您的历史记录并不简单,那么亚当的建议就是您可能获得的最接近的标签,但请注意注意事项我在那里的评论中描述过。请注意,为了让它真正有意义,您想知道中央存储库在该日期的内容,而不是您当地的。默认情况下,在裸存储库中不启用Reflog,但如果您碰巧在那里启用了它们,则可以通过转到该裸存储库并运行git rev-parse master@{2012-01-01}
来获取有问题的提交。否则,本地存储库中的下一个最佳功能是git tag v1.0 origin/master@{2012-01-01}
- 在该日期为您提供跟踪分支的位置。