git高级用法,git cherry-pick

git高级用法,git cherry-pick

1.使用场景

    假设这样一个场景,产品提一个功能需求,你开发完,然后commit了;第二天产品说那个功能不要了,你说可以,然后reset回去;又过两天,产品又对你说,那个功能还是加上去吧,这时候你心里是不是有一万只草泥马奔驰而过,怎么办?代码已经在reset之后做过修改,有了新的commit了啊,难道要重新开发?还是回退?

    其实不要慌,git早已经考虑到了这种情况,这时候就是cherry-pick发挥特效的时候了

2.模拟实战

1.首先我提交了两个commit

commit 86adfc7611154f57dc750ca25a707743b483dd49 (HEAD -> demo)
Author: libinbin <libinbin@ainirobot.com>

Date:   Sat May 19 17:08:48 2018 +0800

    第二次commit

commit 004ff75d9ccf27b6721f6b6ea86efa92319f4102
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:08:15 2018 +0800
    第一次commit

2.然后产品说第二次commit功能不要了,这时候你已经做了第三次commit了

$ git reset --hard 004ff75d9ccf27b6721f6b6ea86efa92319f4102

HEAD is now at 004ff75 第一次commit

$ git commit
[demo 7b1e2c6] 第三次commit
 1 file changed, 1 insertion(+)

$ git log

commit 7b1e2c6bd3851732d0d3e1d01169cd31042b64bc (HEAD -> demo)
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:26:33 2018 +0800
    第三次commit

commit 004ff75d9ccf27b6721f6b6ea86efa92319f4102 (HEAD -> demo)

Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:08:15 2018 +0800

    第一次commit


commit 32b1d3055a25bea5b1d86b85cffe3ba79aa81327
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:05:58 2018 +0800

    otademo本地git库

3.过两天产品说加上"第二次commit"还是这个功能吧

$ git reflog

7b1e2c6 (HEAD -> demo) HEAD@{0}: commit: 第三次commit

004ff75 (HEAD -> demo) HEAD@{0}: reset: moving to 004ff75d9ccf27b6721f6b6ea86efa92319f4102

f2bf3c0 (master) HEAD@{2}: cherry-pick: 第二次commit

$ git cherry-pick f2bf3c0
[demo 0ece56f] 第二次commit
 Date: Sat May 19 17:08:48 2018 +0800
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git log
commit 0ece56f60e1cd8a41374f4ec351d519b7be55f89 (HEAD -> demo)
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:08:48 2018 +0800
    第二次commit

commit 7b1e2c6bd3851732d0d3e1d01169cd31042b64bc
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:26:33 2018 +0800
    第三次commit

commit 004ff75d9ccf27b6721f6b6ea86efa92319f4102
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:08:15 2018 +0800
    第一次commit

commit 32b1d3055a25bea5b1d86b85cffe3ba79aa81327
Author: libinbin <libinbin@ainirobot.com>
Date:   Sat May 19 17:05:58 2018 +0800

    otademo本地git库

可以看出"第二次commit"又找回来了

需要注意的是git reflog这个跟git log的区别

git reflog会保留所有的操作记录,但是git log不会保留reset之前的记录

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值