在SVN中,提交记录是没法修改的。好比说,当咱们提交了某次修改后,发现该次提交中有错误时,只能将将补丁再次提交一遍。这样,就存在两次提交记录,没有保证提交的原子性。html
在GIT中,因为提交是在本地进行的,所以若是没有发布以前,是容许使用reset命令来撤销提交记录的,这个命令有以下三种使用方式:git
默认是-mixed,不过我没有看出来mixed和soft有什么区别,都是把日志历史给reset了,内容保持不变。而hard则是把日志连同内容一块儿回退了,相似于回滚。服务器
日志能够reset的好处是:能够随时commit,这样就不用担忧后面的修改影响到前面,commit日志也能够不用填得很规范。每完成一个迭代后,再把以前的全部commit所有给reset掉,从新写一个能正规的注释,发布到服务器。spa
修改已经发布的修改 日志
若是你的提交已经发布,reset后发布时会将服务器上的提交记录给同步下来,进行一次merge后再次发布。此时就GIT的工做方式是和SVN同样的了。此时,若是要修改服务器段的提交记录,则可使用使用了园子里的一篇文章:Git如何永久删除文件(包括历史记录)中介绍的强制推送的命令:htm
git push origin master --forceblog
先reset,本地提交后,用该命令强制发布,此时服务器的提交记录就会被被本地提交记录覆盖。get
须要注意的是:修改已经发布的提交是有很大的有风险的,会致使没法回退到历史版本。这也是SVN不容许修改提交记录的缘由。虽然GIT提供了这个命令,但不到万不得已的时候不建议使用它。同步