博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git-撤销(回退)已经add,commit或push的提交
阅读量:7201 次
发布时间:2019-06-29

本文共 1000 字,大约阅读时间需要 3 分钟。

本文只阐述如何解决问题,不会对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是最好的。

转载地址:http://ofzum.baihongyu.com/

你可能感兴趣的文章
EMIPLIB的使用及扩展(一)
查看>>
进制间的相互转换
查看>>
CyanogenMod 编译 Google Galaxy Nexus (GSM) 全过程
查看>>
oracle case when的用法
查看>>
2.2 使用 JAXP 对XML文档进行SAX解析
查看>>
W-2 Grub4dos硬盘安装BackTrack
查看>>
python文件操作一
查看>>
萌新的Linux学习之路(十三)--Linux中设备的访问
查看>>
find的各种参数及例子
查看>>
【转】Ajax工作原理
查看>>
Python学习之路--初始
查看>>
百度运维工程师成长经历
查看>>
php
查看>>
lesson1 - Navigation in Linux
查看>>
sae开始收费,准备把博客迁过来
查看>>
开发 Linux 命令行实用程序
查看>>
我的友情链接
查看>>
二十五、小程序的图片预览(放大滑动)
查看>>
批处理学习笔记(一)--删除几天的文件(forfile)
查看>>
使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之一
查看>>