git 代码回退

在开发过程中,我们可以随时将代码回退。

在介绍回退之前,先提一下git reflog这条命令,这条命令很有用,git log只能查看已经提交的记录,那些删除的记录则看不到。

换句话说,git reflog记录了所有的操作。

假设本地仓库已经有了几次提交,如下:

commit 4fb2b11aff3849e1d423a2c9694897ae4a50ebae
Author: songchong <songchong@artekmicro.com>
Date:   Mon Sep 3 10:13:13 2018 +0800

    77777777777777

commit 67332c1f1610072f2d6767b47e36c9b2e9b2976f
Author: songchong <songchong@artekmicro.com>
Date:   Mon Sep 3 10:12:52 2018 +0800

    666666666666

commit 798e558540e28b919bedae0bcc26e342e902f0b6
Author: songchong <songchong@artekmicro.com>
Date:   Mon Sep 3 10:12:27 2018 +0800

    555555555555

commit 4acf061c68b13e74992e6f117c05890b76d8d644
Author: songchong <songchong@artekmicro.com>
Date:   Mon Sep 3 10:12:01 2018 +0800

    test reset hard

commit 9ed7ef2909d1840be64a7719c0d068456def60c2
Author: songchong <songchong@artekmicro.com>
Date:   Thu Aug 23 10:58:48 2018 +0800

    add usb

commit b1ebd90e1174ee954e241f11d24e937e2e3421b1
Author: songchong <songchong@artekmicro.com>
Date:   Thu Aug 23 10:58:13 2018 +0800

    add test.c

现在位于77777777777777的提交。就在此时如果想把代码回退到555555555555时提交的状态。

则可以使用git reset --hard 798e558540e28b919bedae0bcc26e342e902f0b6

(也可以使用git reflog中显示出来的简化conmmit ID,git reset  --hard 798e558)

这样代码就回退到555555555555提交时的状态。当你查看完之后,你想再次把代码回退到77777777777777时的提交,但是这是git log已经查看不到555555555555后面的提交记录。

songchong@srv-artek-pad:~/mytest/gittest$ git log
commit 4acf061c68b13e74992e6f117c05890b76d8d644
Author: songchong <songchong@artekmicro.com>
Date:   Mon Sep 3 10:12:01 2018 +0800

    test reset hard

commit 9ed7ef2909d1840be64a7719c0d068456def60c2
Author: songchong <songchong@artekmicro.com>
Date:   Thu Aug 23 10:58:48 2018 +0800

    add usb

commit b1ebd90e1174ee954e241f11d24e937e2e3421b1
Author: songchong <songchong@artekmicro.com>
Date:   Thu Aug 23 10:58:13 2018 +0800

    add test.c

这时 git reflog就出场了。它会记录你所有的操作记录。

songchong@srv-artek-pad:~/mytest/gittest$ git reflog
4acf061 HEAD@{0}: reset: moving to 4acf061
4fb2b11 HEAD@{1}: commit: 77777777777777
67332c1 HEAD@{2}: commit: 666666666666
798e558 HEAD@{3}: commit: 555555555555
4acf061 HEAD@{4}: commit: test reset hard
9ed7ef2 HEAD@{5}: checkout: moving from master to work
ff81e52 HEAD@{6}: commit: git test
9ed7ef2 HEAD@{7}: checkout: moving from work to master
9ed7ef2 HEAD@{8}: checkout: moving from master to work
9ed7ef2 HEAD@{9}: reset: moving to HEAD^
81e2112 HEAD@{10}: commit: git reset test
9ed7ef2 HEAD@{11}: reset: moving to 9ed7ef2909d1840be64a7719c0d068456def60c2
ce30b18 HEAD@{12}: commit (amend): 6ss
12dda2c HEAD@{13}: commit: 6ss
230e2a9 HEAD@{14}: rebase: aborting
230e2a9 HEAD@{15}: checkout: moving from master to 230e2a9
230e2a9 HEAD@{16}: commit: add 5s
a6ce37f HEAD@{17}: reset: moving to HEAD^
c130472 HEAD@{18}: commit: add 4s
a6ce37f HEAD@{19}: reset: moving to HEAD^
3868094 HEAD@{20}: commit (amend): add 4sss
7d0b26d HEAD@{21}: commit (amend): add 4ss
3c934a5 HEAD@{22}: commit: add 4s
a6ce37f HEAD@{23}: commit: add 3s
9ed7ef2 HEAD@{24}: commit: add usb

这时执行 git  rest --hard 4fb2b11 就能回到77777777777777时的状态,再来看下git reflog

songchong@srv-artek-pad:~/mytest/gittest$ git reflog
4fb2b11 HEAD@{0}: reset: moving to 4fb2b11
4acf061 HEAD@{1}: reset: moving to 4acf061
4fb2b11 HEAD@{2}: commit: 77777777777777
67332c1 HEAD@{3}: commit: 666666666666
798e558 HEAD@{4}: commit: 555555555555
4acf061 HEAD@{5}: commit: test reset hard
9ed7ef2 HEAD@{6}: checkout: moving from master to work
ff81e52 HEAD@{7}: commit: git test
9ed7ef2 HEAD@{8}: checkout: moving from work to master
9ed7ef2 HEAD@{9}: checkout: moving from master to work
9ed7ef2 HEAD@{10}: reset: moving to HEAD^
81e2112 HEAD@{11}: commit: git reset test
9ed7ef2 HEAD@{12}: reset: moving to 9ed7ef2909d1840be64a7719c0d068456def60c2
ce30b18 HEAD@{13}: commit (amend): 6ss

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值