如何在不消除更高版本的情况下从git存储库获取特定(较旧)的文件版本?

时间:2017-06-06 22:33:13

标签: git

我认为获得以前的版本是源代码控制的首要功能之一,并且应该很简单,但它似乎是寻宝解决git解决方案。

我遇到了stackoverflow问题numpy.geomspace。解释关键的事情:

git checkout <commit hash from git log output>

正如我预期的那样,工作目录中的文件被替换/更新了所请求的旧版本,但是我丢失了存储库中的更高版本,得到了一条消息,如&#34; ...分离头。 ..&#34;

这里的任何指导原则将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

如果您有一个特殊的提交,例如abc123456,并且在该提交中文件很好,您只需...

git checkout abc123456 path/to/file

使用此命令,您将在该阶段找到该文件的版本。

您也可以使用分支机构:

git checkout old-branch-name path/to/file

答案 1 :(得分:1)

当你只使用git checkout <somehash>时,你会进入一个独立的HEAD。发生这种情况是因为默认情况下git checkout只是切换分支,指定提交而不是分支会使您进入“无分支模式”(这就是分离的HEAD意味着)。

如果您想从其他版本获取单个文件,还需要指定路径,即git checkout <somehash> -- path/to/file。这会保留所有内容,只需将path/to/file上的文件替换为<somehash>的版本。

所以这会覆盖文件。如果您还想保留当前版本,则应首先重命名。否则,您还可以为此

使用git show的特殊语法
git show <somehash>:path/to/file > new_filename.ext

这实际上将从<somehash>获取文件的内容并打印出来,因此如果将其传输到文件,则可以将不同版本的文件解压缩到不同的文件名中。