美文网首页
git reset和 git revert比较

git reset和 git revert比较

作者: 八十一空 | 来源:发表于2018-05-26 20:09 被阅读8次

    git reset和git revert区别与作用

    一、先介绍几个名词:

    1.working copy工作区

    working copy(工作区)你正在工作的那个文件集

    2.Index

    index也被称为staging area(暂存区),指一整套即将被下一个提交的文件集合。

    3. HEAD

    这是当前分支版本顶端的别名,也就是版本库中最近的一个提交。

    HEAD^=HEAD~1代表版本库中的上一次提交,即最近一次提交的父提交

    HEAD^^ =HEAD~2代表HEAD^的父提交

    ……

    下图是工作区、暂存区与HEAD简单的原理图:

    屏幕捕获_2018_05_26_19_50_15_262.png

    当执行一个git add,提交的内容就暂存在index中,现在你的working copy和index内容是相同的,但是他们和HEAD区不同。

    当执行一个git commit,就创建一个新的commit将内容提交到master,随后HEAD就指向这个新的commit,而index,working copy和HEAD就匹配相同了。

    二、Git Reset

    此命令就是重置HEAD(当前分支的版本顶端)到另外一个commit处。

    1.git reset HEAD

    任何事情都不会发生,HEAD就是当前提交所在的位置。

    2.git reset HEAD~1

    HEAD从顶端移动到前一个提交处

    3.git reset HEAD~2

    HEAD从顶端往下移动两次到倒数第三个提交处

    4.git reset --soft xxx与git reset --hard xxx的区别

    --soft参数让Git重置HEAD到另外一个提交处,但也到此为止。此时暂存区,工作区都不会做任何变化。

    --hard参数它将重置HEAD返回到另外一个提交处,重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。

    如下两图,在--soft执行后,HEAD指向的commit变成上一次commit,但工作区ls前后的文件没有变化。而执行git reset --hard HEAD后,HEAD指向当前commit f4cef,同时working copy工作区的d.md文件没了。[图片上传失败...(image-d1fb66-1527335571902)]

    屏幕捕获_2018_05_26_18_58_46_837.png 屏幕捕获_2018_05_26_19_03_06_226.png

    三、Git reset和Git revert区别与作用

    reset是回朔到指定的commit版本(指定commit版本之后的操作都消失了)。revert是删除指定的commit,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。

    Git reset --hard与git revert比较如下:

    1.有四次提交分别提交了4个文件 a.md , b.md, c.md, d.md.当前提交b3e2

    屏幕捕获_2018_05_26_16_58_59_676.png

    git reset --hard HEAD^返回上次提交

    执行后,HEAD回到f4cefc2这一版。ls当前目录只有 a.md , b.md, c.md。而d.md 没了,commit历史中,b3e234这一版被抹去了。

    屏幕捕获_2018_05_26_16_59_11_75.png

    2.提交了4个文件 a.md , b.md, c.md, d.md.

    屏幕捕获_2018_05_26_17_14_25_943.png

    Git revert HEAD^

    如下图,上次提交的文件c.md消失,ls中剩下a.md , b.md, d.md.

    但是上次提交的commit4862f版本没有消失,此命令生成了一个新的commit59f37。

    屏幕捕获_2018_05_26_17_14_40_897.png

    所以,修复一些错误,可视情况来使用以上命令:

    1.修复未提交文件中的错误(重置), 让工作目录回到上次提交时的状态
    $ git reset --hard HEAD
    2.修复已提交文件中的错误
    $ git revert HEAD

    相关文章

      网友评论

          本文标题:git reset和 git revert比较

          本文链接:https://www.haomeiwen.com/subject/irxvjftx.html