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 ...
随机推荐
- 微信小程序video组件出现无法播放或卡顿
微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,加一个custom-cache=”true“即可解决,这个属性文档上没有,是从小程序开发社区中get到的.
- 实践:使用FLANN.LSH进行检索
1.Survey: FLANN 库详情见:http://en.wikipedia.org/wiki/Flann http://medievalscotland.org/kmo/AnnalsIndex/ ...
- DB2高可用hadr搭建参数配置
主机上执行db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_HOST 192.168.1.2db2 UPDATE DB CFG FOR XMHIS USING ...
- centos7 redmine安装过程(转载)
redmine 部署过程 redmin官方文档写的太烂加上不熟悉ruby搞了半天,回到家后觉得还是记录下好,希望可以帮助有需要的人,少走弯路. 版本说明 下面的版本很重要redmine 版本 3.3 ...
- 洛谷P1941飞扬的小鸟 完全背包
思维难度不大,就是有许多细节要注意. 1.不能开滚动数组. 2.要特判飞过天花板的情况. Code: #include<cstdio> #include<algorithm> ...
- 推荐一款能支持国密SM2浏览器——密信浏览器
密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净. ...
- THUWC2019 划水记
Day -2 在学校呆了inf天之后终于回家了! Day 0 在家无(tui)所(fei)事(mo)事(yu),顺便被拉出去剪了个头发,想写写thusc2017的题也写不动,一直在网上冲浪,到处乱翻以 ...
- CSS - 内联元素span 强制换行失败的可能原因
在CSS中,标签span 强制换行失败:(使用display:block) 可能原因:float:left or float:right
- vue中数组变动更新检测
Vue 包含两种观察数组的方法分别如下 1.变异方法 顾名思义,变异方法会改变被这些方法调用的原始数组,它们也将会触发视图更新,这些方法如下 push() pop() shift() unshift( ...
- [Noi2002]Savage
[Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd ...