美文网首页
关于git reset和git revert

关于git reset和git revert

作者: 是unicorn | 来源:发表于2017-01-02 16:19 被阅读0次

    Git

    HEAD

    • 当前分支最近的一个提交

    Index

    • index也被称为staging area,暂存区,下个提交的文件集合

    Working Copy

    • 正在工作的那个文件集,叫做工作区

    Flow

    1. 刚checkout一个分支,HEAD指向最近的一个提交,HEAD和Index(暂存区)和Working Copy(工作区)的文件集是一致的
    2. 修改,会提示git add,此时 Working Copy和Index、HEAD不一样
    3. git add后,working copy和index一样,但是他们和head不一样
    4. git commit后,创建一个新的commit,HEAD指向这个commit,三者又一致了

    git reset

    • 总的来说,git reset是用来将当前branch重置到另外一个commit的,这个动作可能会影响index和work tree
    • 与checkout的区别
      比如当前刚checkout到master
      - A - B - C(HEAD, master)
      如果你希望将master指向B,执行git reset B就可以移动HEAD到B
      - A - B (HEAD, master) # - C is still here, but there's no branch pointing to it anymore
      如果刚才运行的是git checkout B
      - A - B(HEAD) - C(master)
      这时候HEAD和master branch就不在一个点上了,你进入了detached HEAD STATE(如果这个commit没有和任何一个branch tip是一致的话),HEAD,work tree和index都指向了B,但是却已经是另外一个分支了,因为master branch依然指向C。
    • Reset
      reset本身做的事情就是重置HEAD到另外一个commit
      比如,我们刚checkout到master,先如果执行git reset HEAD,任何事情都不会发生
      如果git reset HEAD~1,HEAD会指向上一个commit
      • 参数 soft
        HEAD会到另外一个commit上,index会存放所有差别集合,index和working copy一致
      • 参数hard
        HEAD会回到另外一个commit,且index和working copy也是
      • 参数mixed(default)
        默认参数,HEAD会回到另外一个commit,index也会,working copy存放差别集合

    git revert

    • 用于反转提交
      revert用一个新的提交来消除一个历史提交所做的任何修改
      revert后本地的代码会回滚到指定的历史版本,且git push既可以把origin代码更新,也不会有reset造成的冲突问题
      git revert xxCommit
      不同于reset,reset 是将HEAD往后移动,revert是往前,只不过是反向提交

    参考

    http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
    http://www.cnblogs.com/kidsitcn/p/4513297.html

    相关文章

      网友评论

          本文标题:关于git reset和git revert

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