我正在源代码中的回归工作。我想告诉Git:“根据参数化的日期/时间签出源代码”。这可能吗?

我目前的观点也有阶段性的变化,我不想失去这些变化。理想情况下,我希望在当前源文件和基于之前日期的某个我感兴趣的版本之间来回切换。


当前回答

对于那些喜欢管道替换而不是命令替换的人

git rev-list -n1 --before=2013-7-4 master | xargs git checkout

其他回答

要从签出创建一个新分支,使用-b选项和新分支名称。

git checkout -b 19July2021 `git rev-list -n1 --before=2021-7-19 master`

当你处于“分离HEAD”状态时,你可以避免git切换

如果您希望在进行构建时能够返回到存储库的精确版本,最好标记进行构建的提交。

其他答案提供了在某个时间将存储库返回到分支中最近提交的技术——但它们可能并不总是足够的。例如,如果您从一个分支构建,然后稍后删除该分支,或者从一个稍后重新基于的分支构建,那么您从任何当前分支构建的提交在git中都可能变得“不可访问”。git中不可达的对象最终可能会在存储库压缩时被删除。

在提交上放置标记意味着它永远不会变得不可访问,无论之后对分支做什么(除非删除标记)。

看起来你需要这样的东西: 基于日期的Git签出

换句话说,您使用rev-list来查找提交,然后使用签出 真正理解它。

如果您不想丢失阶段性更改,最简单的方法就是这样做 创建一个新分支,并将它们提交给该分支。你可以随时换回去 在树枝间来回。

编辑:链接断开了,下面是命令:

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
git rev-list -n 1 --before="2009-07-27 13:37" origin/master

取打印出来的字符串(例如XXXX),然后做:

git checkout XXXX

如果希望在特定日期签出单个文件,可以将文件路径传递给两个命令。

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master FILEPATH` FILEPATH