Git 常用回滚撤销命令总结
Git 一个开源的分布式版本控制系统,最常用于代码开发过程中版本控制
这里简单总结记录一下git常用命令,最主要是由于某些原因提交错误要进行回滚撤销操作。
目录
- Git 相关概念
- 1 工作区
- 2 暂存区
- 3 本地版本库
- 4 远程版本库
- 5 HEAD 和 origin
- HEAD
- origin
- 版本回滚撤销
- 场景1 工作区文件还没有add到暂存区
- 场景2 已经add到暂存区但没有commit
- 场景3 已经commit到本地仓库但没有push到远程仓库
- 场景3 已经push到远程仓库
- git reflog
- 场景4 已经push到远程仓库,但只想撤销某一次的提交
Git 相关概念
1 工作区
你电脑上的本地目录,该目录中存放着将要或者已经被Git所管理的项目文件
2 暂存区
英文叫 stage 或 index。一般存放在工作区 .git 目录下的 index 二进制文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
3 本地版本库
工作区有一个隐藏目录 .git,这个是 Git 的版本库。
4 远程版本库
一般服务器上(如:Github或者自己搭建的Gitlab)会存在一个项目文件的版本库,服务器上的版本库就叫远程版本库。
git pull 命令
从远程的版本库clone 拉取文件到本地版本库git push 命令
从本地版本库推送更新的文件到远程版本库,达到本地和远程文件一致
5 HEAD 和 origin
一般采用 git log 命令查看如下内容:
这里面的 HEAD origin是什么意思?
HEAD
可以将 HEAD 看做当前工作区文件所属的是哪一个分支
origin
指的就是远程仓库
上面图中 git log 后的第一条信息:
commit a3bc6e672da90112565e76b50474e2b09ab99a99 (HEAD -> master, origin/master, origin/HEAD)
表示 当前本地电脑上的文件归属 master 分支(HEAD -> master), 本次commit后也推送到了远程master上
版本回滚撤销
场景1 工作区文件还没有add到暂存区
使用 git status 查看当前工作区状态
$ git checkout -- aaa.txt # 丢弃文件 aaa.txt的修改$ git checkout -- . # 丢弃全部没有提交的文件的修改
注意:
该命令将丢弃文件的全部修改,回到和远程服务器上版本一致
场景2 已经add到暂存区但没有commit
$ git reset HEAD aaa.txt # 取消暂存,将文件重置回场景1$ git reset HEAD . # 取消刚刚add的所有文件的暂存,将文件重置回场景1
该命令不会丢弃文件的修改,如果你还想丢弃这两个文件的全部修改,参考 场景1的方法
场景3 已经commit到本地仓库但没有push到远程仓库
使用 git log 命令可以发现,当前本地版本库的版本要高于远程版本,也就是说已经commit了但没有push,此时可以采用下面的命令回滚本地仓库。
$ git reset --hard <commit_id> # 回到其中你想要的某个版
<commit_id> 可以使用 git log 命令查看每一次提交的信息
注意:例如上图,commit_id 应该是 “测试提交1”的commitId
场景3 已经push到远程仓库
$ git reset --hard <commit_id> # 回到其中你想要的某个版$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并回退到 <commit_id>
git reflog
针对场景3 :
如果此时又返回刚刚的回退版本操作,想还是恢复刚刚的操作怎么办?
采用 git reflog 查看所有的git操作命令日志
看到 HEAD@{0} HEAD@{1} HEAD@{2} HEAD@{3} … 了吗,
当前版本是 HEAD@{0},其实之前 HEAD@{1}是最新的版本的,我们想**前滚**到 HEAD@{1}这个commit_id 上怎么做?
还是和场景3的做法一致!
$ git reset --hard c45051284d211114cdce1499e635bc8252e0bbba # 强制前滚到 "测试提交2" 那一次提交操作$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并恢复到 <commit_id>
场景4 已经push到远程仓库,但只想撤销某一次的提交
例如下面的情况,我想撤销 “测试提交3” 这一次的全部文件修改,怎么弄?
采用 git revert 命令进行撤销提交操作
通过revert命令反做一个版本的提交,git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
git revert -n c45051284d211114cdce1499e635bc8252e0bbba # 撤销 “测试提交3” 那一次的提交,不影响“测试提交4”的提交 ,-n 是--no-commit 如果不带这个参数会自动提交一条commit
git revert 之后,反做的操作已经add到了暂存区,可以进行本地文件修改操作,然后再次做commit操作和push操作。
THANKS OVER .
Git 常用回滚撤销命令总结相关推荐
- git 代码回滚_谁说用 Git 一定要用命令行?试试 SourceTree 吧
作者:邵磊http://juejin.im/post/59bc944d51882519777c5e07 整理:后端技术精选 前言 作为使用Sourcetree大于3年的我,已熟知git的每一个功能,并 ...
- GIt版本回滚的两种方法reset、revert
在学习关于git版本回滚操作之前我们应该需熟练使用git log查看Git提交日志,同时也应学会使用git reflog查看Git提交日志. 可参考博客:git log的使用_WEB前端李志杰的博客- ...
- Git如何回滚代码?
摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...
- git 代码回滚_git代码版本管理(1)——git版本回滚
git代码版本管理(1)--git版本回滚 1.问题背景 在利用github.gitlab.Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提 ...
- Git如何回滚代码? 1
摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...
- git 代码回滚 reset revert 详解 IDEA操作 4种reset区别
问题描述: 我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退.回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 rever ...
- Git学习总结(19)——Git代码回滚总结
一.Git代码回滚分为两种情况,分别是push前回滚和push后回滚. 二.push前代码回滚 push前代码回滚使用reset命令,形如:git reset [--soft | --mixed | ...
- idea中git版本回滚以及git指令回滚
idea中git版本回滚以及git 回滚指令 场景 在项目开发过程中,git提交的最新版本的代码出现问题,需要回滚到之前的某一个版本,需要使用到git的reset操作进行回滚,与之区分的revert操 ...
- 在idea里如何实现Git项目回滚
在idea里如何实现Git项目回滚 先我们要回滚的项目右键,如下: 点击Git,再点击Show History 选择你要回滚的分支 然后右键,如下: 点击Copy Revision Number ...
- git revert回滚merge提交时报错(commit xxx is a merge but no -m option )
git revert 回滚merge提交 报错内容: $ git revert 788bab4 error: commit 788bab4021fe14db3a0865aa55fd1b798b74c2 ...
最新文章
- Python多模块文件共享变量
- Vsftpd服务重启、暂停命令
- 电子计算机工程学,计算机工程
- 分享php中四种webservice实现的简单架构方法及实例(转)
- 3-JAVA中的JSON操作
- 马斯克称面临巨大通胀压力 暗示特斯拉可能涨价
- VS2015 C#利用QrCodeNet生成QR Code
- H - Color the ball(树状数组)(区间更新)(求单点)(线段树)
- 2018暑假第二周总结(7.16-7.22)
- 游戏缺少d3dx9_XX.dll文件的解决办法
- FileUtils工具类
- 模拟电子技术知识点总结
- IDEA报 java 找不到符号解决办法
- android 手机存储大小设置,如何让手机内存变大?内存不足解决方法【详解】
- 浅析直播间海量聊天消息的架构设计难点
- C++中的back_inserter
- 教你一招让你高效搞定高品质的H5交互动画
- PMP和MBA、MPA的比较
- 张飞硬件第一部的感受
- QT disconnect