关于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
解决办法如下:
然后强制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删除了,并且会增加一条提交记录。