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 ...
随机推荐
- HTML5 audio 如何实现播放多个MP3音频
<audio>标签是HTML5中的新标签,定义声音用于嵌入音频内容,比如音乐或其他音频流.用的比较多音频格式是.mp3. <audio>标签常用属性如下表 属性 值 描述 au ...
- java json转义引号
String jsonMapStr = "{\"system\":\"1,\\\"2\\\",3\",\"createD ...
- Redis入门笔记-redis内部数据结构(01)
redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...
- C# indexof 注意
- jQuery添加新的元素
append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 $(&quo ...
- IOS开发:使用lipo合并armv7,i386,armv7s库文件
假设多个版本的lib分别是 libxxx.armv7.a , libxxx.armv7s.a, libxxx.i386.a我们的目标是 把他们合并成超级通用版的libxxx.a 打开命令行 Term ...
- 【原创】Vue.js 中 axios 跨域访问错误
1.假如访问的接口地址为 http://www.test.com/apis/index.php (php api 接口) 2.而开发地址为http://127.0.0.1:8080,当axios发起 ...
- nmcli 静态方式添加IP地址
[root@ansible02:/root] > ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state U ...
- Python Django log日志
log日志 log开发日志 一.创建项目 1.python -m venv ll_env # 创建虚拟环境 2.source ll_env/bin/activate # 激活虚拟环境 3.pip in ...
- Spring事务管理 与 SpringAOP
1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略. ...