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 没有之前提交的记录