如何从git存储库中获取文件的特定(旧)版本,而不删除更高版本?

如何从git存储库中获取文件的特定(旧)版本,而不删除更高版本?,git,Git,我应该认为获得一个以前的版本是源代码管理的主要特性之一,而且应该很简单,但它似乎是一个寻找git解决方案的寻宝游戏 我遇到了一个问题。要解释关键问题: git checkout <commit hash from git log output> git签出 正如我预料的那样,工作目录中的文件被替换/更新为请求的旧版本,但我在存储库中丢失了更高版本,收到了一条消息,如“…分离头…” 如有任何指导原则,将不胜感激。谢谢。如果您有一个特殊的提交,如abc123456,并且在该提交中文件

我应该认为获得一个以前的版本是源代码管理的主要特性之一,而且应该很简单,但它似乎是一个寻找git解决方案的寻宝游戏

我遇到了一个问题。要解释关键问题:

git checkout <commit hash from git log output>
git签出
正如我预料的那样,工作目录中的文件被替换/更新为请求的旧版本,但我在存储库中丢失了更高版本,收到了一条消息,如“…分离头…”


如有任何指导原则,将不胜感激。谢谢。

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

git checkout abc123456 path/to/file
使用此命令,您将在stage中找到该文件的版本

您还可以使用分支:

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

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

git checkout abc123456 path/to/file
使用此命令,您将在stage中找到该文件的版本

您还可以使用分支:

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

当你仅仅使用git checkout时,你就会进入一个分离的头部。这是因为默认情况下,
git checkout
只切换分支,指定提交而不是分支会让您进入“无分支模式”(这就是分离头的意思)

如果要从不同版本获取单个文件,还需要指定路径,即
git checkout--path/to/file
。这将保持所有内容不变,只需将
路径/to/file
中的文件替换为
中的版本即可

所以这会覆盖文件。如果还想保留当前版本,则应首先重命名它。否则,您也可以为此使用特殊语法
git show

git show <somehash>:path/to/file > new_filename.ext
git show:path/to/file>new\u filename.ext

这实际上是从
中获取文件内容并打印出来,因此如果您将其传输到文件,您可以将不同版本的文件提取到不同的文件名中。

当您仅使用
git checkout
时,您将进入一个分离的头部。这是因为默认情况下,
git checkout
只切换分支,指定提交而不是分支会让您进入“无分支模式”(这就是分离头的意思)

如果要从不同版本获取单个文件,还需要指定路径,即
git checkout--path/to/file
。这将保持所有内容不变,只需将
路径/to/file
中的文件替换为
中的版本即可

所以这会覆盖文件。如果还想保留当前版本,则应首先重命名它。否则,您也可以为此使用特殊语法
git show

git show <somehash>:path/to/file > new_filename.ext
git show:path/to/file>new\u filename.ext

这将从
获取文件的内容并打印出来,因此如果您将其传输到文件,您可以将文件从不同版本提取到不同的文件名。

据我所知,您没有丢失存储库中的较新版本-查看此问题的答案-据我所知,您没有丢失存储库中的较新版本-查看此问题的答案-谢谢。show命令的特殊语法解决了我的问题。我不想更改存储库的状态,我只想获得旧版本的代码。谢谢。show命令的特殊语法解决了我的问题。我不想更改存储库的状态,我只想获得旧版本的代码。