在使用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 是一直向前的.