git revert <commit-id>
命令说明
git revert <commit-id>:撤销某个提交
我们首先创建一个文件,在文件中提交两个commit
commit-1
commit-2
然后执行git revert <commit-id>命令
可以看到,git插入一个revert commit还原了commit-2修改的内容
这点很有用,有时候把分支merge进了保护分支,如果使用reset --hard + push -force是没法上传的。 这个时候就可以使用revert进行还原合并。
revert处理非末尾的commit
我们先创建三个commit, 然后执行
git revert commit-2来清除第二个commit,发现结果冲突了
只好执行
git revert --abort终止操作。
以后还是从末尾的commit开始revert吧 = =
处理merge节点
先创建一个merge节点
merge节点不能直接进行revert操作,需要使用-m参数,-m 1表示回到主分支的内容,-m 2表示使用被合并分支的内容。
git revert -n
-n命令可以不直接生成revert commit节点,而是将修改存到暂存区,相当于reset --soft,非常好用
git revert后的问题
现在master分支先和入branch-2,然后在revert掉branch-2的内容
再和入branch-2的内容就无法实现了
因为master此时已经有branch-2新增的节点了,只是被revert覆盖了。
解决方案1: 切到branch-2分支,将reset --soft到合并前的commit,再重新提交合并
解决方案2: 在master分支revert掉上一个revert commit
解决方案3: 使用rebase -i合并branch-2的更新,再merge入master,其实原理同方案1