您的位置:首页 > 其它

Git 版本回退2

2017-02-18 23:33 90 查看
今天接着上篇继续讲解,我们在日常团队协作开发中,经常会遇到这样的情景:当完成最后一个模块,为了抓紧时间赶最后一趟地铁,高高兴兴的把自己程序提交到远程仓库,刚回到家躺下,突然想到有个小失误不应该提交,遇到这种情况,需要回退,我们应该怎么处理呢?

首先,必须要明白的一件事,任何普通用户不能擅自做有关远程仓库回退的操作,如果你擅自回滚了远程仓库,会对项目团队其他人造成不可预知的影响。如果需要回退版本,先联系项目的仓库管理员,或项目负责人。

我们这时候需要用到git revert这条命令,我们之前讲了一个git reset,那两者有啥区别呢。先从概念入手:

(1) 如果你已经push改动的代码到线上代码库,reset删除指定commit以后,其实并不影响远程仓库的代码,这时候你git push可能导致一大堆冲突.但是revert并不会。

(2) reset 是在正常的commit历史中,删除了指定的commit,这时HEAD是向后移动了,而revert是在正常的commit历史中再commit一次,只不过是反向提交,他的HEAD 是一直向前的,因此此次操作之前和之后的commit和history都会保留,revert相当于递增了一条log。


举个例子吧:假设当前有3个commit,git  log如下:

commit3(f3343d):  add test3.c
commit2(43dfff):  add test2.c
commit1(1qdd4r):  add test1.c

执行 git revert HEAD~1之后,也可以执行git
revert 43dfff... 会提示提交信息,提交后git  log如下:

commit4:  Reverts “test2.c”
commit3:  test3.c
commit2:  test2.c
commit1:  test1.c

上述执行完可以看出commit3,commit2都继续存在在记录中。

而执行 git reset HEAD~1之后,再次看git  log,如下:

commit2:  test2.c
commit1:  test1.c


commit3已经不再记录中,同时也没有递增一条新记录,当然按之前博客里讲的,test3.c并没有丢失,代码仍然保留。

其实今天讲的都很范范,我在以后的博客中会专门讲解git遇到的各种情况的处理办法。

上述版本回退,撤销修改的几种情况大体讲完,主要就是几个命令:git checkout,git reset,git revert 等等。后续会结合分支,在遇到具体情况具体讲解这一部分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git revert与 rese