Subversion 用户眼中的 Git (8): SVN没有后悔药,git有好多
Subversion 没有后悔药,就是说一旦完成向服务器的数据提交,就没有办法再追回(从客户端),只能在后续的提交中修正——回退或者修改等。
Git 非常神奇,拥有无数颗粒后悔药...
为什么Subversion 没有后悔药,而 Git 拥有呢。因为 Subversion 作为集中式的版本控制,不能允许个人对已提交的数据进行篡改,而Git 是分布式版本控制系统,代码库是属于个人,允许任意修改。Git 通过对提交建立数字摘要来保证提交的唯一性和不可更改性,通过版本库在多人之间的多份拷贝保障数据的安全性。
Git 丢弃最新的一个或几个提交
使用 git reset --hard 命令可以永远丢弃最新的一个或者几个提交。- 丢弃最新的一个提交:
$ git reset --hard HEAD^
- 丢弃最新的两个提交:
$ git reset --hard HEAD^^
- 丢弃某一提交之后的改动
$ git reset --hard COMMIT-ID
Git 和 Subversion 修改提交说明
提交后如果对提交说明不满意,Git 可以使用命令 git commit --amend 修改提交说明。 Subversion 也可以修改提交说明,是通过修改提交的 svn:log 版本属性实现的:- 不但可以修改最后一次提交的说明,并且可以修改历史提交的提交说明;
- Subversion 修改提交说明是不可逆的操作,可能会造成提交说明被恶意修改;
- Subversion 缺省关闭修改提交说明的功能。管理员在设置了提交说明更改的邮件通知后,才可以打开该功能
- Git 可以修改最后一次提交说明,并不是说不能修改历史版本的提交说明,只是修改最后一个版本提交说明拥有最简单的命令
- Git 修改提交说明,会改变提交的 commit-id。即修改提交说明后,将产生一个新的提交
- Git 可以通过 git reset --hard ,git commit --amend,git rebase onto 等命令来实现对历史提交的修改
- 使用 stg 工具可以更为简单的修改历史提交的提交说明,包括提交的内容