在使用git做版本管理时,可以很轻松实现代码版本的管理。比如发现线上最新的版本出了问题,需紧急回退到上个版本,用git就能轻易完成。
1. git reset
- 首先需用
git log
查找要回退版本的commit ID - 然后再用
git reset --hard [commmit_id]
回退到目标版本
reset回退到之前的版本后,其原理是把当前版本的指针指向了目标历史版本。如果又想返回到未来的版本,可用git relog
查看回退历史,再用git reset
跳转到未来的版本
2. git revert
git revert用一个新提交来消除一个历史提交所做的任何修改。
- 同样先用git log 查找要回退版本的commit ID
- 然后用
git revert [commit_id]
回退到目标版本
两者的区别
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit看似达到的效果是一样的,其实完全不同.
第一: 已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突(或git push -f强制推送).但是revert 并不会.
第二: 如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三: reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.