git revert 和 git reset

来源:互联网 发布:淘宝office激活原理 编辑:程序博客网 时间:2024/04/28 03:44
git revert
        撤销某次操作,而且会保留之前的commit,并且会把此次撤销作为最新的提交。
        eg:
              git revert HEAD                  撤销前一次 commit
              git revert HEAD^                撤销前前一次 commit
              git revert  commit              (commit 表示提交的版本编号,比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)  撤销指定的版本,该次撤销也会作为一次提交进行保存
 
        git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。

git reset
        如果想把已经add到stage区中的文件撤回时,则可以使用该命令。同时在你git add 完成后,也会有相关的提示:
        
        

        git reset  [--hard|soft|mixed|merge|keep] [<commit>HEAD]:将当前分支重置(reset) 到指定的<commit> 或 HEAD (如果不显示指定commit,默认是HEAD,即最新的一次提交)。并且根据[mode]有可能更新stage和 working directory。mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。
A)  --hard :重置stage区和working directory。从<commit>以来,在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。
      eq:git reset --hard cc53e545224340ea7135040933258fb4b8ad4431
               HEAD 指向版本cc53e545224340ea7135040933258fb4b8ad4431。
     
      git reset --hard HEAD^    退回到上一个版本 (working directory的修改全部丢弃)
       HEAD      表示当前版本
       HEAD^     表示上一个版本

B) --soft :stage和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会重新处于暂存区(stage),准备提交的状态,此时使用git commit 就会提交它。 

C) --mixed:默认模式即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,文件的状态处于执行git add 之前的状态(Untracked files)。

总结:
git revert 是撤销某次操作,此次操作之前的commit都会被保留
git reset    是撤销某次提交,但是此次之后的修改都会被退回到暂存区,git log 没有之前提交的记录


1 0