我正在源代码中的回归工作。我想告诉Git:“根据参数化的日期/时间签出源代码”。这可能吗?
我目前的观点也有阶段性的变化,我不想失去这些变化。理想情况下,我希望在当前源文件和基于之前日期的某个我感兴趣的版本之间来回切换。
我正在源代码中的回归工作。我想告诉Git:“根据参数化的日期/时间签出源代码”。这可能吗?
我目前的观点也有阶段性的变化,我不想失去这些变化。理想情况下,我希望在当前源文件和基于之前日期的某个我感兴趣的版本之间来回切换。
当前回答
保持当前的更改
你可以把你的工作藏起来,不用承诺,git stash。你 也不会用少管所的赃物把它拿回来。或者你也可以(如carleeto所说)git将它提交到一个单独的分支。
使用rev-parse按日期签出
你可以使用rev-parse在特定日期签出一个提交,就像这样:
git checkout 'master@{1979-02-26 18:30:00}'
关于可用选项的更多细节可以在git-rev-parse中找到。
正如评论中提到的,这个方法使用reflog来查找历史记录中的提交。默认情况下,这些条目在90天后过期。虽然使用reflog的语法没有那么冗长,但只能回溯到90天前。
使用rev-list按日期退房
另一个不使用reflog的选项是使用rev-list来获得在特定时间点的提交:
git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`
如果你只想要你的历史记录而不是合并带来的版本,请注意——first-parent。这就是你通常想要的。
其他回答
如果你达到reflog的限制,你只需要做一点改变(从其他笔记来看,你克隆回购的日期或90天的历史)
git checkout `git rev-list -1 --before="Jan 17 2020" HEAD`
你也可以用
git checkout `git rev-list -1 --before="Jan 17 2020 8:06 UTC-8" HEAD`
它会检查之前的提交与日期或你输入的日期-时间相关,看到你可以使用日期修饰符,我猜如果你不使用UTC+-N它只使用UTC时间。
看到我只把master改为HEAD,即使你没有reflog到你想要检查的日期,它似乎也能工作!!
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`
Git:按日期结帐
如果希望在特定日期签出单个文件,可以将文件路径传递给两个命令。
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master FILEPATH` FILEPATH
保持当前的更改
你可以把你的工作藏起来,不用承诺,git stash。你 也不会用少管所的赃物把它拿回来。或者你也可以(如carleeto所说)git将它提交到一个单独的分支。
使用rev-parse按日期签出
你可以使用rev-parse在特定日期签出一个提交,就像这样:
git checkout 'master@{1979-02-26 18:30:00}'
关于可用选项的更多细节可以在git-rev-parse中找到。
正如评论中提到的,这个方法使用reflog来查找历史记录中的提交。默认情况下,这些条目在90天后过期。虽然使用reflog的语法没有那么冗长,但只能回溯到90天前。
使用rev-list按日期退房
另一个不使用reflog的选项是使用rev-list来获得在特定时间点的提交:
git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`
如果你只想要你的历史记录而不是合并带来的版本,请注意——first-parent。这就是你通常想要的。