一、背景:
偶尔会遇到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. OAuth2授权服务器Id Server一键生成配置原理

    OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建OAuth2客户端的问题.但是如何进一步降低OAuth2的使用难度,把创建的OAuth2客户端转化为配置成为了刚需, ...

  2. kvm 虚拟化技术 1.2 之配置网络桥接

    实验一:配置网路桥接模式 默认kvm的网络是NAT模式,一般生产环境用桥接模式,把虚拟机改成桥接模式 1.查看是否安装网桥设备 [root@kibana opt]# rpm -qa|grep brid ...

  3. unity---监听物体被点击

    脚本 public void OnPointerClick(PointerEventData eventData) { Debug.LogFormat("{0} is Click" ...

  4. Python汉诺塔求解

    1 def hanoi(n,a,b,c): 2 3 if(n>0): 4 5 hanoi(n-1,a,b,c) 6 7 print("Move disc no:%d from pile ...

  5. 第6组 Alpha冲刺 (5/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.董翔云 4.杜筱 5.詹鑫冰 6.黄少丹 7.曹兰英 8.鲍凌函 9.曾丽莉 10.吴沅静 1.3 冲刺成果展示 1.1 基 ...

  6. 【JSOI2016】最佳团体

    思路:二分答案+动态规划(结合dfs序) 类型:选/不选:最大比值 代码: #include<stdio.h> #include<bits/stdc++.h> using na ...

  7. C++编码规范(本人自定义)

    C++编码规范 1.变量名用camelCase命名法(即lowerCamelCase,小驼峰拼写法)命名. 即小写字母开头,如果变量名是复合词,第二个单词的首字母大写. 举例: int digitsC ...

  8. VmWare安装Centos8注意事项

    VmWare安装Centos8注意事项 1.需选择稍后安装操作系统 2.选择操作系统版本 3.修改虚拟机配置 4.配置完成点击开启虚拟机(注意要将鼠标放在屏幕中央,点击一下后才能使用上下键进行选择) ...

  9. CYaRon!语

    P3695 CYaRon!语 开始之前 上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟. 然后这个题花了我一个多星期 还是最差解 不过,为了纪念我的第 20 道紫题,纪念我这一周的努力,我还是想 ...

  10. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...