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 暂存区

英文叫 stageindex。一般存放在工作区 .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 常用回滚撤销命令总结相关推荐

  1. git 代码回滚_谁说用 Git 一定要用命令行?试试 SourceTree 吧

    作者:邵磊http://juejin.im/post/59bc944d51882519777c5e07 整理:后端技术精选 前言 作为使用Sourcetree大于3年的我,已熟知git的每一个功能,并 ...

  2. GIt版本回滚的两种方法reset、revert

    在学习关于git版本回滚操作之前我们应该需熟练使用git log查看Git提交日志,同时也应学会使用git reflog查看Git提交日志. 可参考博客:git log的使用_WEB前端李志杰的博客- ...

  3. Git如何回滚代码?

    摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...

  4. git 代码回滚_git代码版本管理(1)——git版本回滚

    git代码版本管理(1)--git版本回滚 1.问题背景 在利用github.gitlab.Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提 ...

  5. Git如何回滚代码? 1

    摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...

  6. git 代码回滚 reset revert 详解 IDEA操作 4种reset区别

    问题描述: 我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退.回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 rever ...

  7. Git学习总结(19)——Git代码回滚总结

    一.Git代码回滚分为两种情况,分别是push前回滚和push后回滚. 二.push前代码回滚 push前代码回滚使用reset命令,形如:git reset [--soft | --mixed | ...

  8. idea中git版本回滚以及git指令回滚

    idea中git版本回滚以及git 回滚指令 场景 在项目开发过程中,git提交的最新版本的代码出现问题,需要回滚到之前的某一个版本,需要使用到git的reset操作进行回滚,与之区分的revert操 ...

  9. 在idea里如何实现Git项目回滚

    在idea里如何实现Git项目回滚 先我们要回滚的项目右键,如下: 点击Git,再点击Show History 选择你要回滚的分支 然后右键,如下: 点击Copy  Revision  Number ...

  10. git revert回滚merge提交时报错(commit xxx is a merge but no -m option )

    git revert 回滚merge提交 报错内容: $ git revert 788bab4 error: commit 788bab4021fe14db3a0865aa55fd1b798b74c2 ...

最新文章

  1. Python多模块文件共享变量
  2. Vsftpd服务重启、暂停命令
  3. 电子计算机工程学,计算机工程
  4. 分享php中四种webservice实现的简单架构方法及实例(转)
  5. 3-JAVA中的JSON操作
  6. 马斯克称面临巨大通胀压力 暗示特斯拉可能涨价
  7. VS2015 C#利用QrCodeNet生成QR Code
  8. H - Color the ball(树状数组)(区间更新)(求单点)(线段树)
  9. 2018暑假第二周总结(7.16-7.22)
  10. 游戏缺少d3dx9_XX.dll文件的解决办法
  11. FileUtils工具类
  12. 模拟电子技术知识点总结
  13. IDEA报 java 找不到符号解决办法
  14. android 手机存储大小设置,如何让手机内存变大?内存不足解决方法【详解】
  15. 浅析直播间海量聊天消息的架构设计难点
  16. C++中的back_inserter
  17. 教你一招让你高效搞定高品质的H5交互动画
  18. PMP和MBA、MPA的比较
  19. 张飞硬件第一部的感受
  20. QT disconnect

热门文章

  1. Auto.Js 抖音脚本 性别识别 消息自定义 免ROOT
  2. DA14580蓝牙硬件系统总览(二)
  3. python求职意向怎么写_软件测试求职意向怎么写(附样本)最新精美简历模板
  4. 长链接转化成短链接java,长链接转短链接(短网址)
  5. 域名注册好了怎么使用 注册域名后需要备案吗
  6. LOAP引擎:clickhouse02: 引擎及sql语法
  7. Discuz 模板目录结构注释说明
  8. Android 自定义View实现拖动滑块完成验证
  9. xdb 服务_oracle禁用XDB服务
  10. 室内外无缝定位导航,GPS系统可以实现吗?