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

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


当前回答

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

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

其他回答

提醒,自Git 2.23(2019年8月)起

切换到一个新的分支从过去的提交日期: git switch -c newBranch $(git rev-list -n1——before=yyyy-mm-dd main) 还原当前工作树中过去某个日期的文件 git restore -SW -s $(git rev-list -n1——before=yyyy-mm-dd main)——path/to/file

在2021/2022年不要使用旧的、过时的、令人困惑的git checkout命令:git switch和git restore详细描述了它们正在做什么(只使用git switch的分支,只使用git restore的文件)

不要使用' ':更喜欢更现代的$(命令替换)语法,而不是过时的反撇号语法。

在我的例子中,-n 1选项不起作用。在Windows上,我发现下面的命令序列工作得很好:

git rev-list -1 --before="2012-01-15 12:00" master

这将返回给定日期的适当提交的SHA,然后:

git checkout SHA

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

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

进一步使用rev-list选项,如果你想找到最近的合并提交从你的主分支到你的生产分支(作为一个纯粹的假设的例子):

git checkout `git rev-list -n 1 --merges --first-parent --before="2012-01-01" production`

我需要找到特定日期的生产服务器上的代码。这为我找到了它。

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

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