git 回滚

1、去除工作区(还没有add):git checkout 文件名    git checkout .  去除所有(注意:有一个点)

2、去除暂缓区, add 了但还没有commit :git reset 文件名 git reset . 去除所有(注意:有一个点)此时会回到工作区

3、去除历史记录区,commit 了 但还没有push :

git reset --hard HEAD^  切换为head的前1版本

git reset --hard HEAD^^ 切换为head的前2版本

备注:

git reset [--soft | --mixed | --hard

上面常见三种类型

--mixed

会保留源码,只是将git commit和index 信息回退到了某个版本.

git reset 默认是 --mixed 模式 
git reset --mixed  等价于  git reset

--soft

保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

--hard

源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在push代码以后,也使用 reset --hard <commit...> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现权是冲突.....

所以,这种情况你要使用下面的方式

4、已经push了

对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

revert

git revert用于反转提交,执行evert命令时要求工作树必须是干净的.

git revert用一个新提交来消除一个历史提交所做的任何修改.

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

通常,前几位即可

git revert c011eb3

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit

看似达到的效果是一样的,其实完全不同.

第一:

上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.

第二:

如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

第三:

reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

注意:git revert 版本  此时的版本是你要撤回的版本 (比如你提了一个版本 9ed3edf   ,你现在发现这个有错,你需要git revert 9ed3edf 。他不会影响后面的版本,即9ed3edf后面还有其他人提交了,但这个没有实际操作过,最好不要这样做)
5、已经push了,并且是merge后push的:

此时你会发现:git revert 版本号 会报错:

Finished one revert.
[master]: created 1e689e2:


此时你可以用 git revert 8e3e555 -m 1

首先你可以看看git log -1查看你合并的  (如果是之前也可以 git log -2  //git log -3)


然后:git revert 通过 -m或者--mainline参数,以及配合一个整数参数,git就知道到底要revert哪一个merge。

-m 1命令,也就是9f19d6217,使用-m 2会revert第二个commit,也就是a07f859ab

git revert 8e3e555 -m 1


参考文章:

https://www.cnblogs.com/ShaYeBlog/p/5368064.html

https://blog.csdn.net/jeffasd/article/details/51736569

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值