Git 学习笔记(三)
我记得最初学习的时候我提到了使用版本控制软件的最大好处是让你可以永远后悔,那么如何吃后悔药呢?在项目过程中我们很有可能因为各种因素对我们的操作进行回滚,对于传统的版本控制系统来说,并不复杂,拿 SVN 举例,revert 是最常用的操作,当然这是你还没提交到服务器端操作。如果你提交到了中央仓库,那就只能做一次逆向 merge 操作,来把所有的修改都 merge 回去。但是到了 git 这里,似乎一切都变得不那么简单了。
前面的文章中已经提到 Git 的每一台电脑都会存在一个完整的库,这就导致了我们的回滚成本大大的增加了,如果从修改来看,我们会存在三个区域工作副本、索引和提交之后的历史对象区域,我在这里把回滚分为三类:
工作区回滚
这是最简单的一种操作,这个和 revert 很像,在操作上叫 git checkout。
索引回滚
索引回滚也不复杂,先使用 git reset 将其重新回到工作副本中,然后再使用 git checkout 回滚即可。
提交回滚
提交后的回滚则相对复杂,根据不同的情况,会有不同的解决方案,需要我们使用不同的命令。
- 修改最后一次提交:如果说你提交了之后需要撤回这次修改,想要回滚后重新提交,你只需要使用 git commit --amend,就可以回滚重新提交了。
- 回滚提交(不抹除记录):可能有时候你可能提交了一个错误的版本上去,但这个错误你发现时已经很晚了,这个时候你需要回滚到某个版本上来修正这个问题,你可以使用 git revert HEAD xxxx 来回滚本次提交,不过需要注意的是,你回滚后,很有可能发生冲突,需要你自己去解决它。
- 回滚提交(抹除记录):如果说你一不小心犯了个二,把错误的版本推送到了服务器上,那么推荐你使用 git reset 命令,他的作用就是将当前的 Head reset 到你指定的分支,我们可以称之为变基,但需要我们注意使用的参数,有 soft、mixed、hard 三种,git reset --soft 不会修改你的 index 和 working tree 中的任何修改;git reset --mixed 是为默认情况,会造成 index 中的修改丢失; git reset --hard 这绝对是一个危险的命令,请慎重考虑后再用,他会把你的工作区和历史记录中的所有修改全部丢弃掉。
相比较于命令,我还是推荐大家使用 source tree 这款工具,不是打广告,谁用谁知道。
另附 http://www.juvenxu.com/2010/11/28/a-successful-git-branching-model/
Git 学习笔记(三)的更多相关文章
- Git学习笔记(三)
Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...
- git学习笔记三
1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...
- Git学习笔记三--管理修改、撤销修改、删除文件
1.管理修改 什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. 为什么说Git ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- GIT学习笔记(3):分支管理
GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...
- GIT学习笔记(2):时光机穿梭与远程仓库
GIT学习笔记(2):时光机穿梭与远程仓库 撤销操作 1.GIT如何跟踪修改 在我们修改了代码内容后,执行了git add和git commit命令来将其交由Git进行版本控制.我们前面举的例子是这样 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
随机推荐
- Intel VTune Amplifier XE 使用
VTune <VTune 开发者手册> 1. 安装 1.1 软件安装 下载: (安装包下载地址) 安装: # 1.解压 tar -zxvf filename.tar.gz # 2.安装 c ...
- vue-cli 2.0 常用命令
一.查询npm版本 npm -v 二.安装npm npm install npm g 三.安装webpack npm install webpack -g 四.安装vue命令行工具 npm insta ...
- 用Navicat自动备份mysql数据库
以下文章转载自https://blog.csdn.net/u013628152/article/details/54909885,放在自己的博客园以供后面方便查询 —————————————————— ...
- 转载:SQL Server中查询CPU占用高的SQL语句
SQL Server中查询CPU占用高的SQL语句 SQL Server 表变量的用法 究竟什么是敏捷测试--朱少民
- chrome模拟微信
这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT.选择USER_AGENT,选other,微信的HTTP_USER_AGENT是: 在iPhone下 ...
- 前端开发—jQuery
jquery简介 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交互, ...
- 搭建`wenblogic`执行`install`脚本失败
搭建weblogic服务,前期准备都已经完成,安装包都是已上传,执行install_wls1213.sh脚本,出现以下报错: install_wls1213.sh: line 1: rectory: ...
- Javascript解析URL
举个栗子,一个网页的URL为https://i.cnblogs.com/EditPosts.aspx?opt=1,要分离出通信协议.host.port.path.query.hash等值.这时候我们应 ...
- POJ 2377 Bad Cowtractors( 最小生成树转化 )
链接:传送门 题意:给 n 个点 , m 个关系,求这些关系的最大生成树,如果无法形成树,则输出 -1 思路:输入时将边权转化为负值就可以将此问题转化为最小生成树的问题了 /************* ...
- JavaScript模块化编程之AMD
简单的说一下AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义".它采用异步方式加载模块,模块的加载不影响它 ...