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 ...
随机推荐
- 3D旋转立方体案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java中将JSON格式的数据转换成对应的Bean、Map、List数据
简单说明: 为了方便数据在客户端及服务器端的传输,有时候我们会用一些比较方便组织的数据类型,比如json.xml等传给客户端,客户端也可以重新组织数据传回服务器端.JSON和XML提供了一套比较方便的 ...
- oracle 表锁定解锁
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...
- (转)shiro权限框架详解01-权限理论介绍
http://blog.csdn.net/facekbook/article/details/54890365 权限管理 本文介绍权限管理的理论和权限管理的一些名词. 介绍权限管理 理解身份认证和授权 ...
- 上传图片到PHP服务器
test_picture = function() { api.getPicture({ sourceType: 'library', encodingType: 'png', mediaValue: ...
- 【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21
原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台 ...
- Day 13迭代器生成器
迭代器 1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象. 2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象. 3. ...
- 利用UNIX时间戳来计算ASP的在线时间
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><!DOCTYPE html PUBLIC "-/ ...
- POJ2406A- Power Strings
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- Tensorboard服务激活
首先确定Tensorflow的具体位置(在Dos环境下,也就是cmd) cd .. cd scripts conda env list activate tensorflow tensorboard ...