关于git版本回退的一点心得

背景

       由于我开发中忘记了切换分支,在master分支上开发,且直接在master分支上进行了commit、push,然后,同事告诉我他的代码要准备上线了,需要合并到master分支上线,然而我的代码还没测试通过肯定不能一起上线,于是,需要回退了。

解决方案

1、新建一个开发分支,在开发分支上merge master分支;

2、在master分支上 

git reset --hard 最后一个上线之前的commit_id

使用该方法,master回退到之前的某个版本之后,后面的提交记录则都消失了,是完全回退到当时提交的模样,而开发分支上之前合并的master分支的内容是不会跟着回退的,还是最新修改好的代码,可以继续在这基础上开发、测试。

3、强制推送到远程,千万不要拉取,否则又会把最新提交拉下来

git push --force   

git reset与git revert区别

最主要区别:git reset不会生成新的提交,git revert会生成新的提交。

git reset

$ git reset --hard HEAD^        回退到上个版本
$ git reset --hard commit_id    退到/进到 指定commit_id

1、

git reset --mixed  

当前head指针指向回退到的提交记录上,后几次提交改变的文件依然展示在本地,但不会放在staging暂存区,

git push

 此时提交会提示本地代码比远程的落后,push失败,改为git push --force 强制push, 会提示不允许强制push

git push --force

解决办法如下:

gitlab如何支持push

然后强制push成功:

此时代码已变为第二次提交时的两个文件了:

 

提交记录也恢复到了前两次提交。

 git log可以查看当前存在的两次提交记录,git reflog可以查看所有提交记录:

 

2、

git reset --soft 第四次提交的commit

文件全部恢复,staging暂存区有记录。

3、

git reset --hard 第二次提交的commitid

 

========》具体这篇文章解释的比较清楚

git revert 

git revert 第三次提交的commitid

git push

 

revert的结果是:只是把revert那一次提交的修改的东西删除了,这里只是把第三次提交增加的3.txt删除了,并且会增加一条提交记录。

 

posted @ 2019-05-09 11:30  蓓蕾心晴  阅读(6047)  评论(0编辑  收藏  举报