昨天写代码的时候,误删了一个文件。今天发现的时候,commit 已经 push 到版本库了。本想用 git reset 回退版本,找回文件后重新提交。但是想起 Git 是一个版本控制系统哎,直接从版本库里 checkout 出某个文件的历史版本不就好了?

想法挺好,但是很久没用这个功能,自己已经不记得具体的命令了。于是查了下手册,把和 checkout 历史版本有关的几个命令都记录一下。

从某个历史版本创建新的分支

在 Git 中从当前分支创建并检出新分支的命令是

git checkout -b name-of-new-branch

这个命令实际上是

git checkout -b name-of-new-branch current-branch

的简写形式。也就是说,当我们不指定 checkout 起点时,Git 默认从当前活动分支开始创建新的分支。

Git 的每个提交都有一个 SHA1 散列值(Hash 值)作为 ID。我们可以在 checkout 命令中使用这些 ID 作为起点。比如:

git checkout -b name-of-new-branch 169d2dc

这样,Git 的活动分支会切换到 name-of-new-branch 这个分支上,而它的内容与 169d2dc 这个分支一致。

注意:SHA1 的散列值有 40 个字母,相当长。所以 Git 允许我们在不引起歧义的情况下,使用散列值的前几位作为缩写。

提示:你也可以用 git branch name-of-new-branch 169d2dc 来创建一个历史分支,而不切换到该分支。

将某个历史版本 checkout 到工作区

首先说明,这样做会产生一个分离的 HEAD 指针,所以个人不推荐这么做。

如果我们工作在 master 分支上,希望 checkout 到 dev 分支上,我们会这么做:

git checkout dev

这里 dev 实际上是一个指针的别名,其本质也是一个 SHA1 散列值。所以,我们很自然地可以用

git checkout <sha1-of-a-commit>

将某个历史版本 checkout 到工作区。

将某个文件的历史版本 checkout 到工作区

大多数时候,我们可能只需要对某一个文件做细小的修补,因此只 checkout 该文件就行了,并不需要操作整个 commit 或分支。

上一节我们介绍了如何将某个历史版本完整地 checkout 到工作区。实际上,我们只需要在上一节的命令之后加上需要 checkout 的文件即可。

git checkout <sha1-of-a-commit> </path/to/your/file>

当然,有时候你需要将某个文件的历史版本 checkout 出来,并以一个新的名字保存。这时候可以这么做:

git checkout <sha1-of-a-commit>:</path/to/your/file> </new/name/of/the/file>

在 Git 中 Checkout 历史版本的更多相关文章

  1. 『现学现忘』Git基础 — 24、Git中查看历史版本记录

    目录 1.查看详细的历史版本记录 2.简化显示历史版本记录 3.历史版本记录常用操作 (1)指定查看最近几次提交的内容 (2)以简单图形的方式查看分支版本历史 (3)翻页与退出 4.查看分支相关的版本 ...

  2. git回退到历史版本

    问题描述 在开发的过程中,想要修改一个参数的命名.然后修改各种地方,并且push上码云的远程仓库.然后突然发现还要改很多地方,突然后悔不想改动了.那该怎么办呢? 处理步骤 回退本地的git版本 将本地 ...

  3. GIT 获取指定历史版本代码

    cd 到该项目的一个本地仓库下 log 查看提交记录,找到想要的提交记录,粘贴对应的希哈值 执行 git checkout 希哈值 这本地的这个仓库的代码就会变成你想要的那个版本的代码

  4. Eclipse查看git中的历史,显示详细时间

    clipse show date details in git history我的eclipse查看git history,显示为相对时间,并不是很方便,想要查看某个具体日期的版本代码,就需要设置为具 ...

  5. 永久清理git中的历史大文件

    原文发布于:https://www.chenxublog.com/2019/05/26/remove-git-big-files.html 有写老的git仓库,因为当年的无知,不会用.gitignor ...

  6. Git秘籍:在 Git 中进行版本回退

    导读 在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题.快来试试吧. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中 ...

  7. Git 系列(四):在 Git 中进行版本回退

    在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个 ...

  8. git操作记录(如何回退到某个历史版本,如何提交部分文件等方法)

    当前项目使用git管理代码,在使用的过程中会遇到一些问题,这里记录下 1.合并代码后 在合并组员的代码后会出现下面的界面,开始的时候都会关闭,重新打开,乐此不疲到忍无可忍 解决方法: 出现这种界面是要 ...

  9. Git 强制回退到某个历史版本再推送到远程

    1. 使用 git log 命令历史版本记录回退版本 git reset --hard f6a7c803a6931a9eca011d4e097389e0845cbe49 2. 推送到远程 git pu ...

随机推荐

  1. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  2. 掀起你的盖头来:Unit Of Work-工作单元

    写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...

  3. 浅谈android中的目录结构

    之前在android游戏开发中就遇到本地数据存储的问题:一般情形之下就将动态数据写入SD中存储,在没有SD卡的手机上就需另作处理了;再有在开发android应用的过程中,总要去调试APP,安装时又想去 ...

  4. atom-shell程序打包

    上一篇:http://www.cnblogs.com/luobenCode/p/4504910.html 打包之前要准备一下 请看这篇http://www.cnblogs.com/seanlv/arc ...

  5. Atitti 存储引擎支持的国内点与特性attilax总结

    Atitti 存储引擎支持的国内点与特性attilax总结 存储引擎处理的事情: · 并发性:某些应用程序比其他应用程序具有很多的颗粒级锁定要求(如行级锁定). · 事务支持:并非所有的应用程序都需要 ...

  6. storm 集群配置

    配置storm集群的过程中出现写问题,记录下来 1.storm是通过zookeeper管理的,先要安装zookeeper,从zk官网上下来,我这里下下来的的3.4.9,下载后移动到/usr/local ...

  7. DataBase异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间

    一,RECOVERY PENDING状态 今天修改了SQL Server的Service Account的密码,然后重启SQL Server的Service,发现有db处于Recovery Pendi ...

  8. SSIS 参数的值

    一,SSIS Parameter Value 的type 一个Parameter的Value共有三种类型,分别是Design Value,Server Value,Execution Value. D ...

  9. MVC:The name 'Scripts' does not exist in the current context

    汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 解决:在View下面的Web.Config的namespaces添加 <add n ...

  10. 转帖:DotNet 资源大全中文版

    (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的) API 框架 NancyFx:轻量.用于构建 HTTP 基础服务的非正式(low-ceremony)框 ...