首页 > 其他 > 详细

git cherry-pick

时间:2019-09-10 12:04:51      阅读:84      评论:0      收藏:0      [点我收藏+]

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

git cherry-pick

原文:https://www.cnblogs.com/qiqi715/p/11496263.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!