git revert回退线上版本

315 阅读1分钟

git revert <commit-id>

命令说明

git revert <commit-id>:撤销某个提交

我们首先创建一个文件,在文件中提交两个commit

image.png commit-1

image.png commit-2

然后执行git revert <commit-id>命令

可以看到,git插入一个revert commit还原了commit-2修改的内容

image.png

这点很有用,有时候把分支merge进了保护分支,如果使用reset --hard + push -force是没法上传的。 这个时候就可以使用revert进行还原合并。

revert处理非末尾的commit

image.png 我们先创建三个commit, 然后执行git revert commit-2来清除第二个commit,发现结果冲突了

image.png 只好执行git revert --abort终止操作。

以后还是从末尾的commit开始revert吧 = =

处理merge节点

先创建一个merge节点 image.png

merge节点不能直接进行revert操作,需要使用-m参数,-m 1表示回到主分支的内容,-m 2表示使用被合并分支的内容。

image.png

image.png

git revert -n

-n命令可以不直接生成revert commit节点,而是将修改存到暂存区,相当于reset --soft,非常好用

git revert后的问题

现在master分支先和入branch-2,然后在revert掉branch-2的内容

image.png

再和入branch-2的内容就无法实现了

image.png

因为master此时已经有branch-2新增的节点了,只是被revert覆盖了。

解决方案1: 切到branch-2分支,将reset --soft到合并前的commit,再重新提交合并

解决方案2: 在master分支revert掉上一个revert commit

解决方案3: 使用rebase -i合并branch-2的更新,再merge入master,其实原理同方案1