git的回滚方案记录

Posted by CodingWithAlice on April 26, 2021

git的回滚方案记录

问题描述

现状:本地代码的commit版本为1,远程分支的代码版本为4;

操作:本地修改一些了一些文件(远程也有修改),想要提交到远程分支

​ —> git 管理会提示有冲突,冲突不只是修改的有冲突的文件,还包括其他 2-4 commit 版本的代码

​ —> 直接放弃了所有的不冲突文件的修改,并 push 到了远程分支【错误操作

image-20210426202853112

解决思路

由于这次是多人在同一分支开发,为了使其他人使用时不受阻

只要能够将远程分支上的代码回退到 commit4 版本,那么就能够保证远程分支的代码正确

解决方案1

git log/reflog —> 查看git操作记录,找到要回退的commit4 的[commit id]

git reset --hard [commit id] —> 将本地的代码版本切回想要的 commit 版本【这只是本地分支上的操作

git push origin HEAD --force —> 强制提交一次,之前的 commit5 就会从远程删除【不好的操作

解决方案1 —> 当前方案的确可以让远程分支上的代码正确,

但是但是但是,其他开发者在 git pull 更新代码的时候,会提示本地代码版本提前于远程分支,然后拉不了最新的代码,

只能让每个开发者都按照方案一操作一遍,以保持和远程版本的一致【bad idea

image-20210426203040200

基于解决方案1的补救方案

基于解决方案1,已知远程的分支代码是正确的,在master 上面拉一个新分支 —> 合并当前分支 —> 所有开发者切换到新分支 —> 无痛继续开发

解决方案2:【没有尝试】

通过git revert是【用一次新的commit来回滚之前的commit】

git log # 得到你需要回退一次提交的commit id

git revert <commit_id> # 撤销指定的版本,撤销也会作为一次提交进行保存

git commit -m "......."

git push

解决方案3:【没有尝试】

image-20210426203219671