美文网首页
Git reset 使用

Git reset 使用

作者: Domon_Lee | 来源:发表于2022-02-17 10:07 被阅读0次

    日常的工作当中,由于需要和别人协同工作,代码方面当然就直接使用Git的方式来管理了。在日常使用当中有很多命令比较常用

    • git commit
    • git push
    • git stash
    • git rebase -i HEAD~想要合并的Commit数量
    • git reset

    git rebase 我在这一篇文章已经做了一点讲解,应该使用起来都比较方便。值得一提的是,可以使用git rebase -abort来撤销一次rebase。

    今天来说一下git reset。它的一句话概括

    git-reset - Reset current HEAD to the specified state

    意思就是可以让HEAD这个指针指向其他的地方。例如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。

    它有三种模式,soft,mixed,hard,具体的使用方法下面这张图,展示的很全面了。

    image
    这三个模式理解了,对于使用这个命令很有帮助。在理解这三个模式之前,需要略微知道一点Git的基本流程。正如上图,Git会有三个区域:
    • Working Tree 当前的工作区域
    • Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
    • Repository 提交的历史,即使用git commit提交后的结果
    image

    结合这两张图,基本就非常明确的知道这三个参数的作用范围了。假设我们对于一个txt文件,每次顺序添加一个数字。有4次提交,1 -> 2 -> 3 ->4,则txt中就会有4个数字1234,使用命令git reset [param] HEAD~2

    • soft:将HEAD reset到目标2,由于没有修改working tree和stage,所以这时它俩的文件都是txt[1234],但是如果和HEAD进行diff就会发现,此时HEAD指向是commit2-txt[12]
    • mixed:将HEAD reset到目标2,没有修改working tree,所以working tree里面的文件是txt[1234],此时stage是空的,HEAD指向的仍然是commit2-txt[12]
    • hard:将HEAD reset到目标2,清除三个区域,working tree = stage = history = txt[12]

    Git在默认执行reset命令的时候会选择mixed,如果不小心使用hard参数,丢失了当前的commit也不要慌。在Git中所有的历史提交都会有记录下来,输入git reflog,找到所有的历史纪录。然后通过HEAD@{N}来恢复到某一次提交。

    git reset --hard HEAD@{N}

    ref :

    1. git reset soft,hard,mixed之区别深解
    2. Reset - mixed, hard and soft
    3. SOF

    相关文章

      网友评论

          本文标题:Git reset 使用

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