zoukankan      html  css  js  c++  java
  • git cherry-pick

    1.使用场景

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

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

    2.模拟实战

    1.首先我提交了两个commit

    第二次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
    

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

    回到第一次commit

    $ git reset --hard 004ff75d9ccf27b6721f6b6ea86efa92319f4102
    
    HEAD is now at 004ff75 
    

    第三次commit

    $ git commit
    [demo 7b1e2c6] 
     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

    $ 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

    $ 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之前的记录

    原文链接:https://blog.csdn.net/libinbin147256369/article/details/80375977

  • 相关阅读:
    Python中的返回函数与闭包
    Python的高阶函数小结
    Python的生成器Generator小结
    Vim插件YCM的安装
    用Vundle管理Vim插件
    声卡(Sound Card)基本概念
    Linux中Source的用法
    js 的执行过程
    mongoose@4.5.2的eachAsync bug
    [mongodb] MMAP 和wiredTiger 的比较
  • 原文地址:https://www.cnblogs.com/qiqi715/p/11496263.html
Copyright © 2011-2022 走看看