- git revert回滚到对应的commit-id,默认情况下回滚会产生一条新的记录。
- git revert是用一次新的commit来回滚之前的commit
- git reset撤销指定commit-id,重新生成一个commit-id,执行git push推送到远程,不会对其他的commit-id造成影响。
- git reset是直接删除指定的commit。git reset是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容
- 如果回退分支的代码以后还需要的情况则使用git revert, 如果分支是提错了没用的并且不想让别人发现这些错误代码,则使用git reset
- Feature 开发代码
- Master Merge Feature
- Feature Merge Master
Master回滚Feature,Feature Merge Master,Feature之前修改的代码会没有
Feature revert 到指定commit-id 再合并
Master
// 查看提交记录
git log
// Revert Master合并
git revert -m 1 [commit-id]
// 假设在master分支
// -m 1 是master(当前分支)
// -m 2 是另外一个分支
// 推到远程分支,有冲突,先解决
git push
Feature
// 合并master到开发分支
git merge master
// 回滚master回滚的代码,解决合并revert代码之后开发分支代码没有的问题
git revert -n [commit-id]
// -n参数可以避免再次产生一条提交记录
开发者A:
- 合并分支A
开发者B:
- 合并分支B
突然发现,开发者A和开发者B在开发同个项目,都同时合并到Master,需要将A回滚。
Master
找到A分支的两次合并进行revert
git revert -m 1 [分支A的第一次commit-id]
git revert -m 1 [分支A的第二次commit-id]
Feature A
git revert -n [revert master revert分支A的第一次commit-id]
git revert -n [revert master revert分支A的第二次commit-id]
git reset --hard [commit-id]
git push -f // 强制推送
error: commit xxx is a merge but no -m option was given.
fatal: revert failed
HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交).
// 撤销前一个版本
git revert/reset HEAD
// 撤销前前一个版本
git revert/reset HEAD^
git revert --help