git的回滚方案记录
问题描述:
现状:本地代码的commit版本为1,远程分支的代码版本为4;
操作:本地修改一些了一些文件(远程也有修改),想要提交到远程分支
—> git 管理会提示有冲突,冲突不只是修改的有冲突的文件,还包括其他 2-4 commit 版本的代码
—> 直接放弃了所有的不冲突文件的修改,并 push 到了远程分支【错误操作】
解决思路:
由于这次是多人在同一分支开发,为了使其他人使用时不受阻
只要能够将远程分支上的代码回退到 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】
基于解决方案1的补救方案:
基于解决方案1,已知远程的分支代码是正确的,在master 上面拉一个新分支 —> 合并当前分支 —> 所有开发者切换到新分支 —> 无痛继续开发
解决方案2:【没有尝试】
通过git revert
是【用一次新的commit来回滚之前的commit】
git log
# 得到你需要回退一次提交的commit id
git revert <commit_id>
# 撤销指定的版本,撤销也会作为一次提交进行保存
git commit -m "......."
git push
解决方案3:【没有尝试】