Git-撤销(回退)已经add,commit或push的提交
本文只阐述如何解决问题,不会对git的各种概念多做介绍,如果有兴趣可以点击下面的链接,进行详细的学习:
Pro Git
本文适用的环境
现在先假设几个环境,本文将会给出相应的解决方法:
1. 本地代码(或文件)已经add但是还未commit;
2. 要回退的commit的代码已经commit了,但是还未push到远程个人repository
3. 要回退的commit的代码已经push到远程的个人分支,但是还未merge到公共的repository
4. 要回退的commit的代码已被merge(合入)到公共的repository
关键的几个命令
git reset [commit]
git revert [commit]
git reset有三个参数soft,mixed,hard分别对应head的指针移动,index(暂存区)、以及工作目录的修改,当缺省时,默认为mixed参数。
git revert与reset的区别是git revert会生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留,也就是说对于项目的版本历史来说是往前走的。而git reset 则是回到某次提交,类似于穿越时空。
相应的解决方法
1、 对于上面的前两种情况,我们可以直接使用git reset命令。根据需要的不同使用,不同的参数。但是要注意
git reset –hard
是一个危险的命令,他是git少数几个会销毁数据的命令之一,如果你不小心放了错,你也许可以使用
git reflog
命令来找回你的数据。
2、 对于第三种情况,如果你的远程分支只有你一个人用的话,那么可以在先使用git reset [commit]回退,如何使用git push -f [commit]来强制更新你的远程库2
3、 对于最后一种情况,考虑到其他人的版本历史,使用git reset [commit]是不建议的,此时我们应该使用git revert [commit]改命令不会修改之前的提交历史,相当于对数据做了一次逆操作,然后再执行add,commit等命令。
总结
对于前三种情况,虽然git revert也适用,但是如要要保持版本历史干净的话,建议还是用 git reset3,但是希望保留完整的历史的话,还是使用git revert为好。对于和其他人协同的项目,使用git rever是最好的。
Git-撤销(回退)已经add,commit或push的提交的更多相关文章
- Git学习 --> 个人常用命令add,commit以及push
Git命令行配置1 安装Github2 安装msysgit3 要配置用户名和油箱 git config --global user.name <用户名> 我的命令就是:git confi ...
- git 撤销上一次 commit
1.本地 commit,没有推到远程仓库 可以 git reset --soft <commit_id>,commit_id 是要回退到的某一版本 然后再进行修改,再commit, 如果需 ...
- git 撤销,放弃本地修改,放弃已提交修改
一, 未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 &quo ...
- 【Git】Git使用记录: 撤回已经commit到本地的提交记录
话不多说直接上步骤: git bash直接干到你的code. 直接敲命令: git reset --soft HEAD~1 搞定 就是这么简单粗暴. 如有顾虑请自行找个案例测试即可. 参考资料 htt ...
- git撤销已经push到远程仓库上的代码
具体方法,git命令:git reset --hard <commit_id>git push origin HEAD --force commit_id可以通过git命令:git log ...
- Git 怎么创建本地库,向本地库提交文件
创建版本库是非常简单的,首先选择一个自己想放的位置,创建一个空目录: (用windows的git bash,这个工具的操作命令和linux下类似) $ mkdir gitRespository ...
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突
Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...
- git 撤销push到远程仓库的无用commit
一 回退代码 git reset <版本号> --soft // 软回退 - 所有的commit修改都被撤销了,且修改的代码统一撤回到暂存区 git reset <版本号> - ...
- 转!!git如何撤销上一次commit(或已push)
原博文地址 : https://www.cnblogs.com/lyy-2016/p/6509707.html git如何撤销上一次commit操作 1.第一种情况:还没有push,只是在本地comm ...
随机推荐
- 最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“2003- Can't connect MySQL Server on 'localhost'(10038)“。
优先考虑mysql数据库是否开启 1.先看报错窗口. 通过百度,最终找到的原因是:远程3306端口未对外开放. 于是下面进行远程3306端口开放操作. 首先远程连接服务器,点击“开始”-“管理 ...
- day 01 python基础
1.计算机历史 2.python历史 宏观: python2和python3的区别: python2 源码不标准,混乱,重复代码过多 python3 统一标准,去除重复代码 3.python环境 ...
- 【转载】在线yml与properties文件转换工具
http://www.toyaml.com/index.html
- Centos7修改分区空间
一:缩小/home空间 1.1:备份/home内容 cp -r /home/* /homebak 1.2:删除挂载/home umount /home 1.3:删除/home所在lv lvremove ...
- jQuery开发API参考
http://jquery.cuishifeng.cn/show.html (原地址)
- design
type Config struct { Item lock } func (*Config) getItem(){ } func (*Config) SetItem(){ } channel : - ...
- JavaScript实现本地图片上传前进行裁剪预览
本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...
- Windows CMD 支持ls命令
/********************************************************************** * Windows CMD 支持ls命令 * 说明: * ...
- ubuntu16.04+caffe+GPU+cuda+cudnn安装教程
步骤简述: 1.安装GPU驱动(系统适配,不采取手动安装的方式) 2.安装依赖(cuda依赖库,caffe依赖) 3.安装cuda 4.安装cudnn(只是复制文件加链接,不需要编译安装的过程) 5. ...
- 关于WebAPI跨域踩到的一点坑
最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...