gitret命令详解
开门见⼭,先抛出⼀张图,之后再细讲。
⾸先,先解释下图中的⼀些名词。
怎么画热气球⼀.名词解释
1. Working Copy:当前⼯作⽬录下的⽂件,⼀般指,有修改,没有git add,没有git commit的⽂件
2. Index:也可以被认为是staging area(暂存区),也就是使⽤git add添加后的⽂件,是⼀堆将在下⼀次commit中提交的⽂件,提交之后它就是当前 HEAD的⽗节点。
3. HEAD:指向当前branch最顶端的⼀个commit,也就是该分⽀最近⼀次commit后的节点
婚礼主持词上图的上部分解释如下:
当你第⼀次checkout⼀个新的分⽀,HEAD指向该分⽀上最近⼀次commit。它和index和working copy是⼀样⼀样的。
当你修改了⼀个⽂件,你的working copy不再和index和HEAD相同了,所以当⽂件有改动,它会标记这些⽂件。嚣张的近义词
然后,你执⾏git add命令,这条命令会将上⾯修改的⽂件缓存在index中,你的working copy和index相同了,⽽他们俩和HEAD不同了”。
当你执⾏git commit,Git创建了⼀个新的commit,HEAD这时指向这个新的commit,此时,HEAD & index & working copy⼜相同了⼆.ret命令
git ret 命令格式为git ret [--soft | --mixed | --hard] [<commitId>]
数学选择题是git中最常⽤的命令,但也是最危险,最容易被误⽤的命令。ret命令本⾝很简单,但是它的参数让⼈迷惑,主要的参数有soft、
mixed、hard,它们告诉Git,当执⾏ret时,要对index和working copy做什么。
s oft
--soft参数只告诉Git将其他的commit重置到HEAD,就仅此⽽已。index和working copy中的⽂件都不改变。
实例:
git ret --soft [commitId] 回退到某个版本,只回退了commit的信息。如果还要提交,直接commit即可
m ixed (默认参数)
--mixed 改变HEAD和index,指向那个你要ret到的commit上。⽽working copy⽂件不被改变。当然会显⽰⼯作⽬录下有修改,但没有缓存到index中。
h ard
--hard HEAD & index & working copy同时改变到你要ret到的那个commit上。这个参数很危险,执⾏了它,你的本地修改可能就丢失了。
注意: commitId是每次commit的id,可以通过git log来进⾏获取
三.加餐
吮拇指的人1.恢复git ret —hard的误操作
有时候不⼩⼼通过git ret —hard将版本回退到之前的commit了。可以先通过 git reflog命令,找到要退回的commitId,然后通过命令git ret —hard commitId来恢复
2.git revert 和 git ret的区别
a. git revert是⽤⼀次新的commit来回滚之前的commit,git ret是直接删除指定的commit。
b. 在回滚这⼀操作上看,效果差不多。但是在⽇后继续merge以前的⽼版本时有区别。因为git revert是⽤⼀次逆向的commit“中和”之前的提交,因此⽇后合并⽼的branch时,导致这部分改变不会再次出现,但是git ret是之间把某些commit在某个branch上删除,因⽽和⽼的branch再次merge时,这些被回滚的commit应该还会被引⼊。
c. git ret 是把HEAD向后移动了⼀下,⽽git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
如何实现梦想>向着朝阳参考:
>初中语文八年级