美文网首页
git reset hard/soft以及git revert的

git reset hard/soft以及git revert的

作者: 我才是大田田 | 来源:发表于2017-10-24 20:46 被阅读0次
  • head:这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交
  • index:index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit
  • working copy:working copy代表你正在工作的那个文件集
  • branch:branch是一个指向一个commit的指针

当你第一次checkout一个分支,HEAD就指向当前分支的最近一个commit。在HEAD中的文件集和在index中的文件集是相同的,在working copy的文件集和HEAD,INDEX中的文件集是完全相同的。所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的状态。

git reset不会产生commit,它仅仅更新一个branch指向另外一个commit。
1.git reset --hard HEAD~1/2 意为将版本库回退1/2个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本 。
它将重置HEAD返回到另外一个commit(取决于~1/2的参数),重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来,数据可能丢失。

2.git reset --soft HEAD~1/2 意为将版本库软回退1/2个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。
soft参数告诉Git重置HEAD到另外一个commit,index,working copy都不会做任何变化。

3.git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。

git revert 和 git reset的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

相关文章

网友评论

      本文标题:git reset hard/soft以及git revert的

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