如何从git存储库获取文件的特定(较旧)版本而不擦除较新版本?
我应该认为获取以前的版本是源代码控制的首要功能之一,应该很简单,但它看起来像寻找git解决方案的寻宝游戏。如何从git存储库获取文件的特定(较旧)版本而不擦除较新版本?
我遇到了stackoverflow问题How can I check out a particular version of one file in Git?。套用事情的关键:
git checkout <commit hash from git log output>
正如我预期的事情发生,在工作目录中的文件被替换/更新与请求的旧版本,但我失去了以后的版本在仓库中,有一个像消息“......分开的头......”。
这里的任何指导原则将不胜感激。谢谢。
当你只是用git checkout <somehash>
,那么你将进入一个分离的头。发生这种情况是因为默认情况下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>
获得文件的内容并打印出来,所以如果你管到文件,您可以提取一个文件不同的版本到不同的文件名。
谢谢。 show命令的特殊语法解决了我的问题。我不想更改存储库的状态,我只是想看看旧版本的代码。 – nothingseasy
如果你有一个特殊的承诺像abc123456
并在提交该文件是好的,你只需要...
git checkout abc123456 path/to/file
用这个命令,你会在阶段发现版本的文件。
您还可以使用分支:
git checkout old-branch-name path/to/file
据我了解,你没有失去以后的版本库 - 检查出这个问题的答案 - https://stackoverflow.com/questions/10228760/fix-a-git-detached-head –