[git]撤销的相关命令:reset、revert、checkout
基本概念
- 工作区
- 暂存区
- 本地版本仓库
- 远程版本仓库
如果不清晰上面的四个概念,请查看廖老师的git教程
这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我的修改
存起来。后来用多了,也就明白了为什么。git是一个“版本管理工具”,大家在写东西的时候都用过“回撤”
这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用“回撤”是找不回来的。而“版本管理工具”
就是记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。
当然,上面我只说了一部分git的好处,只为后面的东西作为铺垫。因为,后面会说到三个关于git上面如何“反悔”、
“回到任意时候的代码”,其实就是上面说的原始的“回撤”升级版,版本管理工具的“回撤”。
checkout、reset、revert这三个指令
- checkout:清空工作区的修改
- 清空
工作区的修改git checkout changed_file,清空所有工作区的修改git checkout . - 切换分支
git checkout branch_name(在切换分支之前,需要清空工作区,提交到本地版本仓库或者移除工作区的东西) - 快速查看某个版本的代码
git checkout commit_id/HEAD~last_version_num,切换到一个临时分支,内容就是指定的版本内容
- 清空
- reset:撤销某次提交(commit),并把这次提交的所有修改放到工作区
git reset HEAD~last_version_num/commit_id,注意:这个操作修改历史,所以push到
远程仓库会出现问题,可以通过-f参数,实现强制推送。
- revert:回到之前的某个版本的状态,并创建一个新的提交。
git revert HEAD~last_version_num/commit_id,创建一个新的commit,该内容为指定的
版本的内容,注意:这个操作并不会重写历史,也就是原来的commit还是存在的。
git reset 和git revert的区别:
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进
在回滚这一操作上看,虽然效果差不多,但是日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
参考
[git]撤销的相关命令:reset、revert、checkout的更多相关文章
- git代码回滚:Reset、Checkout、Revert的选择
代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Ho ...
- Git配置信息相关命令
查看git所有配置项 $ git config -l or $ git config --list 全局配置用户名邮箱 $ git config --global user.name "yo ...
- git远程操作相关命令(remote 、push、fetch 、pull)
git remote 为了便于管理,Git要求每个远程主机都必须指定一个主机名.为了便于管理,Git要求每个远程主机都必须指定一个主机名. git remote[查看创库名] git remote 在 ...
- Git学习笔记-相关命令记录
内容来自:https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496 1.Linux安装Git 首先,你可以试着输入git,看看系 ...
- git使用中的一些命令及心得
Git 与 SVN 区别点: 1.Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心 的区别. 2.Git 把内容按元数据方式存储,而 SV ...
- Git撤销提交和修改相关操作
团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...
- git 提代码时的相关命令,Mark一下
以前用命令提代码都是复制粘贴,现在换了工作后,特别是回退代码的命令又忘了,去网上查了好久,心累.特此Mark一下 1. 打patch: 1.1 git diff >> ljh.patch ...
- git reset revert 回退回滚取消提交返回上一版本
git reset revert 回退回滚取消提交返回上一版本 总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你 ...
- 第二章 git 工作区与reset,revert
1.Git工作区原理图 要清楚理解git reset的三个模式的区别,首先应该搞明白Git的各个工作区的划分. 工作区(working directory):在当前仓库中,新增,更改,删除文件这些动作 ...
随机推荐
- HDU-4869 Turn the pokers
原题: Turn the pokers 思路:假设正面为0,反面为1.牌就像这样 000000....... .考虑到假如可以实现最终反面个数为m, 牌共n张, 则这n张排任取m个为反面 ...
- springmvc和struts2的差别
springmvc和struts2的区别相关内容 1.spring mvc的入口是servlet,而struts2是filter filter功能:用户可以改变一个request和修改一个resp ...
- LINUX下常用SHELL指令
Linux Shell常用shell命令 一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示 ...
- 使用Vs2012开发Metro时在另一台win8平板上调试的步骤
需求:开发一个metro应用,因为要给平面设计师参谋, 需要将软件安装在win8平板上. 环境:开发机是win8, win8平板是win8.1rtm , 是用老的win7平板改装的. 步骤: 1:拷 ...
- Building Apps for Windows Phone 8.1教程下载地址整理
官方教程地址http://channel9.msdn.com/Series/Building-Apps-for-Windows-Phone-8-1http://media.ch9.ms/ch9/8db ...
- Backbone源码解析(五):Route和History(路由)模块
今天是四月十二号,距离上次写博已经将近二十天了.一直忙于工作,回家被看书的时间占用了.连续两个礼拜被频繁的足球篮球以及各种体育运动弄的精疲力竭,所以很少抽时间来写技术博客.今天抽出时间把backbon ...
- STC12C5A60S2笔记8(串口)
1. 基本特性 1) 概念 1.1) 并行通信:数据的各位同时进行传输,传输速度快: 1.2)串行通信:通过一根或两根数据线传输数据,数据在信号线上依次传输:串行通信分为同步和异步两种: 1.2.1) ...
- SQL 行列倒置
SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录.本文将以Mysql为例,并以数据采集指标信息获取为例子.在下面的例子,你可以在s ...
- TW2015技术雷达中文版发布
今天thoughtworks 2015新版技术雷达pdf发布了,你可以从这里下载http://engage.thoughtworks.com/HQ0000Q0QOf5pE70nbD00GP,在这里你可 ...
- Mockito自定义verify参数Matcher
在TDD开发中,也许我们会遇见对一些重要的无返回值的行为测试,比如在用户的积分DB中增加用户的积分,这个行为对于我们的业务具有重要的价值,所以我们也希望能测试覆盖这部分业务价值.这个时候我们就得使用m ...