Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:如何检索某个日期的所有文件_Git - Fatal编程技术网

git:如何检索某个日期的所有文件

git:如何检索某个日期的所有文件,git,Git,我相信这是可以做到的(?(在clearcase中,这将非常简单) 在Git这样的DVCS中不要忘记。 只有提交时间戳,您可以轻松地签出某个日期的提交 git checkout master@{1 month 2 weeks 3 days 1 hour 1 second ago} (注意:这样的结帐会给你一个 在ClearCase中,如果您将“保留文件时间”选项设置为true,则这很容易 (如果不是,您实际上会记录每个文件的签入时间,这有点像Git提交时间戳,除了每个文件)使用Git log确

我相信这是可以做到的(?(在clearcase中,这将非常简单)

在Git这样的DVCS中不要忘记。
只有提交时间戳,您可以轻松地签出某个日期的提交

git checkout master@{1 month 2 weeks 3 days 1 hour 1 second ago}
(注意:这样的结帐会给你一个


在ClearCase中,如果您将“保留文件时间”选项设置为true,则这很容易
(如果不是,您实际上会记录每个文件的签入时间,这有点像Git提交时间戳,除了每个文件)

使用
Git log
确定要切换到的适当版本,例如:

git log --since='2010-04-01' --until='2010-04-02'

这将显示2010-04-01上的所有提交,因此只需选择一个与您想要文件的时刻对应的提交,并记下其提交id。然后只需使用
git checkout commit-id
将工作区切换到该提交。这将从当前分支分离您的工作区(HEAD),使用git checkout master返回。

首先,您必须获取标识提交的字符串:

git rev-list -n 1 --before="2009-07-27 13:37" origin/master
它打印字符串(例如XXXX),复制它并执行以下命令:

git checkout XXXX

好的,但是还有一个额外的并发症。我的存储库是远程存储库的克隆。当我给出一个日期时,它表示日志只返回到我的存储库被克隆的日期。如何使用远程存储库的历史记录?@steve:使用远程refspec而不是本地refspec。请参阅:
git checkout/refs/remotes/master@{…}
fatal:“/refs/remote/master@{2010-06-04}”在外部repository@steve:是的,我还没有正确的语法。仍在查找。
ref@{time}
语法使用reflog。回流是本地的。这就是为什么steve的日志只能追溯到它被克隆的日期。注意:在分布式系统(如Git)中,记录的日期和时间可能不是100%可靠或准确的,因为它们可能记录在无数台机器上。希望大多数机器都相当接近“实时”,但在贡献者网络中可能隐藏着奇怪的异常值。我目前遇到的问题是,
git checkout master@{}
无法工作(因为所选日期不在reflog中)。你的解决办法可以解决这个问题,但这是唯一的解决办法吗?使用两个命令并在其间进行一些解析似乎有点笨拙。。。。我想,类似这样的方法是可行的:
git checkout$(git log-n1--until='2017-04-02:00:00'--pretty='%H')
,但看起来还是相当粗糙。