一、背景:
偶尔会遇到git的版本分支的文件被误改的情况,需要还原,此篇文章可能会帮助到你。
PS:
来理解下 Git 工作区、暂存区和版本库概念,可以更好的理解以下的还原操作。
* 工作区:就是你在电脑里能看到的目录
* 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
* 版本库:工作区有一个隐藏目录 .这个不算工作区,而是 Git 的版本库。
详解的流程图如下:
 
二、git常用命令详解
1.git status:
查看工作区代码相对于暂存区的差别
2.git add .:
将当前目录下修改的所有代码从工作区添加到暂存区,.代步当前目录
3.git commit -m 'message':
将缓存区的内容添加至本地仓库
4.git pull orgin master:
先将远程仓库master中的信息同步到本地仓库master中
5.git push orgin master:
orgin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的
6.git checkout -- test001.txt (或还原全部 git checkout -- *)
将工作区修改的文件直接还原为最新版本
7.git reset HEAD
回退至当前版本(本地仓库,并移出暂存区)
8.git reset HEAD^
回退至上个版本(本地仓库,并移出暂存区)
9.git reset --hard HEAD^
回退至上一个版本(本地仓库,并移出暂存区,同时更新工作区的文件)
10.git reset --hard HEAD^^
回退至上上个版本(本地仓库,并移出暂存区,同时更新工作区的文件)
11.git reset –hard commitID 
回退到某一次提交记录(不可逆,之前的提交记录会清除)
12.git revert commitID -m 1
撤销某一次的提交记录
 
三、还原至上一次的提交后(工作区修改了文件,未提交至暂存区)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify
此时界面查看文件包含感叹号.未入暂存区
echo -e 001modify > test001.txt
2.使用git checkout -- test001.txt 将工作区修改的文件直接还原.
此时查看:界面文件为绿色标记,命令行git status状态正常,无提交内容
git checkout -- test001.txt
 
 
四、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,未提交到本地仓库)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify,并add加入暂存区:
echo -e 001modify > test001.txt
2.回退当前的版本: 
界面文件为感叹号标记, 查看状态暂存区内容被移出,本地文件任为修改后.
git reset HEAD
3.使用git checkout -- test001.txt 将工作区修改的文件直接还原. 
此时界面文件为绿色标记,查看状态无提交内容.
git checkout -- test001.txt
 
五、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,已提交到本地仓库,未推送远程仓库)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify,并add加入暂存区:
此时界面文件为感叹号标记
echo -e 001modify > test001.txt
2.使用git commit将修改提交至本地仓库,此时文件状态无感叹号,提示未push远程仓库
3.使用git reset HEAD^回退到上一个版本: 
此时文件状态为感叹号,修改移出暂存区
git reset HEAD^
4. 使用git checkout -- test001.txt 将工作区修改的文件直接还原. 
此时文件状态绿色
git checkout -- test001.txt
5.git push无法将本地仓库推送至远程仓库
使用git push提示报错,因为本地仓库与远程仓库不一致
此时需要推送的话使用强制提交
git push --force
 
六、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,已提交到本地仓库,并已推送远程仓库)
1.本地文件修改,add加入暂存区,commit提交至本地仓库,push推送到远程仓库
此时文件内容被修改,windows文件为绿色标记,状态无提交内容.
2.使用git reset HEAD^直接回退至上个版本:
此时工作区文件仍为修改后,文件状态显示已移出暂存区
git reset HEAD^
3.使用git checkout -- test001.txt 将工作区修改的文件直接还原. 
此时界面文件为绿色标记,查看状态无提交内容.
git checkout -- test001.txt
4.使用git push --force强制提交本地仓库至远程仓库
git push --force
 
七、还原至上一次的提交后(当前版本已push,一步操作)
1.本地文件修改,add加入暂存区,commit提交至本地仓库,push推送到远程仓库
此时文件内容被修改,windows文件为绿色标记,状态无提交内容.
2.使用git reset --hard HEAD^还原至上一个版本
git reset --hard HEAD^
此时同时将文件从暂存区移除,并替换工作区为上个版本,界面标记为绿色
3.使用git push --force强制提交本地仓库至远程仓库
git push --force
 
八.还原至上上次的提交的版本
1.两次提交记录文件修改test001.txt与test002.txt,并分别push远程仓库
通过git log查看提交的记录:
2.使用git reset --hard HEAD^^还原至上一个版本
git reset --hard HEAD^^
此时同时将文件从暂存区移除,并替换工作区为上个版本
3.如需要将本地仓库推送至远程仓库使用强制提交
git push -f
九、还原至某一次提交记录
1.使用git log查看提交的记录信息
2. 使用git reset –hard commitID 还原到某一次提交
git reset --hard 508523eb52ffd6ca274cb01605503fb8bd6bc65a
此时只会把远程版本(对应的commitId)覆盖到本地仓库,然后如果本地做了修改想要提交现修改后的版本到远程就必须强行推送
3.git push -f强制推送本地仓库直远程仓库
git push -f
4.注意:操作不可逆,此时查看git log,还原版本后的记录不复存在
 
十.还原掉其中一次提交并保留其余的提交
1.git log查看日志并找到需要撤销的记录
2.使用git revert commitID -m 1 命令来撤销某一次的提交
git revert 44e1cf32e0d914865d3476d3a765a83a7253586c -m 1
进入对话框保存后记录被撤销
3.查看git log已经撤销,无需推送
ps:当存在分支合并的情况下慎用git revert,会还原已经合并记录的提交.

GIt后悔药:还原提交的操作(谨慎操作)的更多相关文章

  1. Git撤销提交和修改相关操作

    团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...

  2. git常用操作 配置用户信息、拉取项目、提交代码、分支操作、版本回退...

    git常用操作 配置用户信息.拉取项目.提交代码.分支操作.版本回退... /********git 配置用户信息************/ git config --global user.name ...

  3. # .NET Core下操作Git,自动提交代码到

    .NET Core下操作Git,自动提交代码到 转自博客园(阿星Plus) .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归 ...

  4. [转]git图解(3):分支操作

    本文转自:https://www.jianshu.com/p/342a9f8db004   title_img.png git 的分支是它最明显的特性, 大部分人听别人推荐使用git都会听到“git分 ...

  5. Git入门到高级系列2-git高级操作

    视频课程地址 腾讯课堂 git 清理 git clean命令用来从你的工作目录中删除所有没有tracked过的文件. 命令 说明 git clean -n 告诉你哪些文件会被删除. 记住他不会真正的删 ...

  6. Git 学习(三)本地仓库操作——git add & commit

    Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...

  7. Git应用详解第七讲:Git refspec与远程分支的重要操作

    前言 前情提要:Git应用详解第六讲:Git协作与Git pull常见问题 这一节来介绍本地仓库与远程仓库的分支映射关系:git refspec.彻底弄清楚本地仓库到底是如何与远程仓库进行联系的. 一 ...

  8. React---简单实现表单点击提交插入、删除操作

    import React,{Component,Fragment} from 'react' class App extends Component { constructor(){ super() ...

  9. 【Spring】20、使用TransactionSynchronizationManager在spring事务提交之后进行一些操作。

    本文内容 如何在spring事务提交之后进行一些操作,这些操作必须得在该事务成功提交后才执行,回滚则不执行. 要点 如何在spring事务提交之后操作 如何在spring事务回滚之后操作 实现方案 使 ...

随机推荐

  1. Docker学习重点(7)~DockerFile

    一.DockerFile DockerFile是用来构建docker镜像的文件,可以理解为命令参数脚本! 1.构建步骤: 编写一个dockerfile文件 docker build 构建成为一个镜像 ...

  2. MySQL闪回工具之binlog2sql

    一.binlog2sql 1.1 安装binlog2sql git clone https://github.com/danfengcao/binlog2sql.git && cd b ...

  3. 关于vue.config.js 的 proxy 配置

    关于vue.config.js 的 proxy 配置有的同学不怎么明白项目里面有的配置了 pathRewrite 地址重写,有的又没有进行配置?/* * proxy代理配置的说明 * *接口例子:/z ...

  4. 课堂测试——HDFS操作

    要求: 编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务: 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件: ...

  5. 主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了

    随着月末来临,又到了汇报总结的时刻. (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况.销售业绩.客户实况分析.客户活跃度.Top10 sales. 产品情况.订单处理情况 ...

  6. 0-1knapsack

    Python 实现0-1背包问题(回溯法) 题目 解题思路 回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需 ...

  7. flink窗口分类

    窗口分类 按照驱动类型分类 窗口本身是截取有界数据的一种方式,所以窗口一个非常重要的信息就是"怎样截取数据".换句话说,就是以什么标准来开发和结束数据的截取. 按照驱动类型分类主要 ...

  8. 合宙AIR105(二): 时钟设置和延迟函数

    目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 Air105 的时钟 高频振荡源 芯片支持使用内部振荡源, 或使 ...

  9. jvm造轮子

    博客内容来源于 刘欣老师的课程,刘欣老师的公众号 码农翻身 博客内容来源于 Java虚拟机规范(JavaSE7) 博客内容的源码 https://gitee.com/zumengjie/litejvm ...

  10. 全新升级的AOP框架Dora.Interception[4]: 基于Lambda表达式的拦截器注册方式

    如果拦截器应用的目标类型是由自己定义的,Dora.Interception(github地址,觉得不错不妨给一颗星)可以在其类型或成员上标注InterceptorAttribute特性来应用对应的拦截 ...