本文链接:http://volnet.github.io/#!docs/git/reset-to-old-version.md

在使用Git进行版本管理的时候,经常会遇到一些错误的提交。

在开始演示之前,我们先建立一个测试的环境。

mkdir gittest
cd gittest
git init echo "a" >> a.md
git add .
git commit -m "add a.md" echo "b" >> b.md
git add .
git commit -m "add b.md" echo "c" >> c.md
git add .
git commit -m "add c.md" rm -rf a.md
git add .
git commit -m "remove a.md" git remote add origin http://gitserver-url

方法一:git revert(推荐)

推荐理由:git revert将保留commit历史。假设有a、b、c三次顺序提交,那么假设被回滚到a,则b、c仍然存在,同时会多出d。
 
git log --oneline

931568f remove a.md
f622cef add c.md
2a0c5a9 add b.md
6fbba34 add a.md # 假设要回到2a0c5a9 git revert -n 2a0c5a9..931568f # ls可以看到工作目录中的文件已经恢复到当时的状态,这个时候查询git status将看到 2a0c5a9 commit前的状态。 # 这时候需要重新提交文件 git commit -m "revert 2a0c5a9..931568f and recommit" git push

方法二:git reset --hard(不推荐)

不推荐理由:git reset将使历史无法恢复。假设有a、b、c三次顺序提交,那么假设被回滚到a,则b、c将不复存在。
 
git log --oneline 

931568f remove a.md
f622cef add c.md
2a0c5a9 add b.md
6fbba34 add a.md # 假设我们要恢复到2a0c5a9,则可以 git reset --hard 2a0c5a9 # 此时ls你将看到a.md git push -f #这里需要增加-f或者--force命令,原因当前的HEAD指针指向了一个旧版本,而服务器上这个版本不是最新版本。其实服务器并不知道你是使用reset命令得到的旧版本,以为你是一个长期没有获取最新版本的用户,提交了一个错误的版本。因此它会建议你git pull之后再更新。如果你非常明确你要这么做,并且不关心你目标版本之后的版本(可能包含别人的提交),你大可以就此使用-f来强制提交。同时你将获得一个干净的历史,就像什么都没有发生过一样。

Git撤销提交的更多相关文章

  1. git 撤销提交的文件

    一.问题 近期在使用git时遇到一个问题,就是在git上传文件时,将一个100兆的大文件添加到了git,并执行了push操作,这时在上传完毕后,会提示这个错误 Large files detected ...

  2. Git撤销提交和修改相关操作

    团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...

  3. git撤销提交到remote的commit

    Reseting remote to a certain commit Assuming that your branch is called master both here and remotel ...

  4. git撤销提交(commit)

    我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited) 一.简介 Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照 ...

  5. git tag、gitignore和git撤销提交

    前言 最近在git的使用过程中遇到了一些新的问题,所以写下来方便自己回忆. git tag 打标签 git tag -a v1.00 -m "注释" git tag 打标签命令 - ...

  6. Git 撤销所有未提交(Commit)的内容

    撸了好多代码,但是突然设计改了(~~o(>_<)o ~~):或者引入个第三方库,后来又发现用不着,想删掉,但文件太多了(比如几百个):那,怎么办呢,都不想了...Git 比人聪明,所以能很 ...

  7. git撤销本地提交但未push的记录

    ### git撤销本地提交但未push的记录 前言:有时候本地执行commit命令或者cherry-pick命令后发现提交了不需要提交的东西,就需要把已提交的commit记录撤销下来,简单做下记录 撤 ...

  8. Git撤销对远程仓库的push&commit提交

    撤销push 1. 执行  git log查看日志,获取需要回退的版本号 2. 执行 git reset –soft <版本号> ,如 git reset -soft 4f5e9a90ed ...

  9. IDEA工具java开发之 常用插件 git插件 追加提交 Code Review==代码评审插件 撤销提交 撤销提交 关联远程仓库 设置git 本地操作

    ◆git 插件 请先安装git for windows ,git客户端工具 平时开发中,git的使用都是用可视化界面,git命令需要不时复习,以备不时之需 1.环境准备 (1)设置git (2)本地操 ...

随机推荐

  1. 安装运行okvis

    1. 安装依赖项 sudo apt-get install cmake   //cmake sudo apt-get install libgoogle-glog-dev  // glog是Googl ...

  2. SQL Server 查询表备注信息的语句

    --name   字段名称--user_type_id --max_length 最大长度--is_nullable 是否允许空--remark  描述SELECT c.name, c.user_ty ...

  3. 用.net访问电子枢纽信用中心的数据查询服务

    概要说明 电子枢纽全称国家交通运输物流公共信息平台,主要提供物流及生产企业进行物流相关数据交换的标准和API,详细介绍可参考其官网www.logink.org,本文假定阅读者对该平台已有了解,并已成功 ...

  4. Bootstrap插件系列——Bootstrap-table初始化、分页、客户端搜索、服务端搜索

    又好久不写博客,最近项目都是用的bootstrap的样式,不出意外,应该是要在bootstrap的道路上越走越远了,所以下定决心,把bootstrap的插件都好好学学. 昨天写了boostrap-ta ...

  5. sql 通过表名获取所有列名

    因为要做数据迁移,也就是业务数据库的数据要迁移到历史数据库,这两个数据库理论上表结构是一样的,但因为时间原因,可能业务库升级了表结构,但历史库没有升级,且加字段的顺序不一样,导致 insert int ...

  6. ASP.NET MVC+Entity Framework 访问数据库

    Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...

  7. IE6的连接数限制问题

    今天解决了一个bug.看似是UI的bug,最后发现IE的设置问题(严格来说,IE6这么做没有问题,因为HTTP协议的规范如此). 先描述一下问题: 有一个页面管理Job,选中一些Job可以Run,每次 ...

  8. Crystal Reports拉报表报错:Error detected by database DLL

    问题描述: 最近在使用Crystal Reports打印报表时,提示错误信息:"Error detected by database DLL." 如下图: 经查找,是因为数据库名称 ...

  9. 20145202、20145225、20145234 《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验

    实验内容 1.配置环境 2.使用vi 编辑器阅读理解源码 2.编译应用程序 运行 make 产生可执行文件httpd 3.下载调试 使用 NFS 服务方式将HTTPD 下载到开发板上,并拷贝测试用的网 ...

  10. OVER 分析函数

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用. rank,dense_rank,row_numb ...