在SVN中,提交记录是无法修改的。比如说,当我们提交了某次修改后,发现该次提交中有错误时,只能将将补丁再次提交一遍。这样,就存在两次提交记录,没有保证提交的原子性。

在GIT中,由于提交是在本地进行的,因此如果没有发布之前,是允许使用reset命令来撤销提交记录的,这个命令有如下三种使用方式:

  1. git reset -soft: 只撤销commit,保留working tree和index file。
  2. git reset -mixed: 撤销commit和index file,保留working tree
  3. git reset -hard: 撤销commit、index file和working tree,即撤销销毁最近一次的commit

默认是-mixed,不过我没有看出来mixed和soft有什么区别,都是把日志历史给reset了,内容保持不变。而hard则是把日志连同内容一起回退了,类似于回滚。

日志可以reset的好处是:可以随时commit,这样就不用担心后面的修改影响到前面,commit日志也可以不用填得很规范。每完成一个迭代后,再把之前的所有commit全部给reset掉,重新写一个能正规的注释,发布到服务器。

修改已经发布的修改

如果你的提交已经发布,reset后发布时会将服务器上的提交记录给同步下来,进行一次merge后再次发布。此时就GIT的工作方式是和SVN一样的了。此时,如果要修改服务器段的提交记录,则可以使用使用了园子里的一篇文章:Git如何永久删除文件(包括历史记录)中介绍的强制推送的命令:

git push origin master --force

先reset,本地提交后,用该命令强制发布,此时服务器的提交记录就会被被本地提交记录覆盖。

需要注意的是:修改已经发布的提交是有很大的有风险的,会导致无法回退到历史版本。这也是SVN不允许修改提交记录的原因。虽然GIT提供了这个命令,但不到万不得已的时候不建议使用它。

在GIT中修改提交记录的更多相关文章

  1. git log 查看提交记录,参数:

    git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指 ...

  2. git log 查看提交记录

    git log 查看提交记录 1. git log 查看提交历史记录2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示3. git log ...

  3. git查看commit提交记录详情

    相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...

  4. git: hook 修改提交信息

    git获取数字顺序版本号 因为git的版本使用的是hash值,不能很直观的看出那个版本,所以想找到一种方法,获取顺序的版本号,在网上找到了方法,可以获取顺序版本号 摘自:[使用bash从SVN和Git ...

  5. Git批量修改提交历史

    有些时候我们可能需要批量修改提交历史,当然了,最近一次的提交历史很简单我们可以利用 git commit --amend 来进行最近一次提交的修改,如果你此时想要更新作者提交时间等也可以在amend之 ...

  6. 【重学Git】整理提交记录

    有时候我们在本分支做了一个很小的更改提交,其他分支想直接拿到这个更改提交,有没有一种不像merge或rebase这么正式的做法呢?也就是说:我仅仅是想获取其中一个小改变而已.cherry-pick就是 ...

  7. Git仓库的提交记录乱成一团,怎么办?

    大家好,今天和大家聊聊git当中一个非常好用的功能--区间选择,它可以帮我们处理看起来非常复杂的提交记录.从而帮助我们很快找到我们需要的内容. 如果大家有参与过多人协同的项目开发,比如十几个人甚至更多 ...

  8. Git中撤销提交

    Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...

  9. git中误删提交(commit)后,怎么恢复

    “xml文件存储数据”提交被我误操作,即使用reset  --hard删除了,然后又进行了三次提交,发现删除的提交有用,需要找回来, 于是找了好久,找到好方法: 1.进入工程下的.git文件下,git ...

随机推荐

  1. es6+最佳入门实践(6)

    6.Symbol用法 6.1.什么是Symbol? Symbol是es6中一种新增加的数据类型,它表示独一无二的值.es5中我们把数据类型分为基本数据类型(字符串.数字.布尔.undefined.nu ...

  2. 平衡树之splay讲解

    首先来说是splay是二叉搜索树,它可以说是线段树和SBT的综合,更可以解决一些二者解决不了的问题,splay几乎所有的操作都是由splay这一操作完成的,在介绍这一操作前我们先介绍几个概念和定义 二 ...

  3. Swift, Playgrounds, and XCPlayground

    http://www.codeschool.com/blog/2014/12/12/swift-playgrounds-xcplayground/ Swift, Playgrounds, and XC ...

  4. 安全测试===BurpSuite使用教程-附安装包

    jar包: Burpsuite1.6亲测可用.zip 我的jdk版本: 运行包: >>> java -cp BurpLoader.jar;burpsuite_pro_v1.6.jar ...

  5. 【反演复习计划】【COGS2431】爱蜜莉雅的求助

    出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...

  6. 可参考的js代码

    function addcompanyFinalBalance(){ var currentDate = new Date(); var currentYear = date.getFullYear( ...

  7. Markdown文件导出为HTML的小程序

    Markdown文件导出为HTML的小程序 为什么做 最近把一些学习经验记下来,总结成MarkDown文件,不知不觉已经有12篇了. Sublime Text 的 MarkDown Preview 插 ...

  8. kafka consumer 代码示例

    使用者小组 使得许多进程的多台机器 在逻辑上作为一个单个的使用者 出现. 我们使用中,一种常见的情况是,我们按照逻辑划分出多个使用者小组,每个小组都是有作为一个逻辑整体的多台使用者计算机组成的集群. ...

  9. python的上下文管理(context)(1)

    本文转载自:http://blog.csdn.net/G_66_hero/article/details/53048540 什么是Python中的上下文管理器 怎么使用上下文管理器 如何创建自己的上下 ...

  10. 使用MybatisGenerator自动生成Model,Mapping和Mapper文件

    Mybatis和Hibernate都是持久层框架,MyBatis出现的比Hibernate晚,这两种框架我都用过,对于二者的优势我的感触不深,个人感觉MyBatis自动生成model,Mapping, ...