• git cherrypick


    目的

    在一个分支上进行了一个或多个提交时,将来某一天突然发现在另外一个分支上也需要进行相同改动,此种情况下如何尽快达到目标。
    举例场景:
    	在 在维护branch1上修改了bug,而修改该bug commit了一个或者多个提交
    	将来某天在 在维护branch2上也需要进行该bug的修改
    	此时可以使用cherry-pick将修改bug的一个或者多个commit同步过来。
    

    方法演示

    pick一个commit

    # branch1
    be17f7f (branch1) 1
    cb86ba1 (HEAD -> branch2, master) bak a
    a119a6c (tag: v1.0) backup
    
    # branc: branch2
    cb86ba1 (HEAD -> branch2, master) bak a
    a119a6c (tag: v1.0) backup
    

    观看log记录可知branch1比branch2多一个提交,将branch1的最后一个提交添加到branch2中,可使用命令
    git cherry-pick commit_id

    $ git cherry-pick be17f7f
    [branch2 974d4e9] 1
     Date: Tue Apr 26 11:38:17 2022 +0800
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    此时branch2中存在commit(be17f7f)

    974d4e9 (HEAD -> branch2) 1
    cb86ba1 (master) bak a
    a119a6c (tag: v1.0) backup
    

    pick多个commit

    $ git log branch1 --oneline
    2e443af (branch1) 4
    79941fe 3
    5008ccd 2
    be17f7f 1
    cb86ba1 (master) bak a
    a119a6c (tag: v1.0) backup
    
    $ git log branch2 --oneline
    974d4e9 (HEAD -> branch2) 1
    cb86ba1 (master) bak a
    a119a6c (tag: v1.0) backup
    

    此时branch1比branch2多三个commit,2,3,4,将多个commit pick过来的方法为git cherry-pick commit_id1..commit_id2,获取得到的commit为(commit_id1, commit_id2],即commit_id1后直到commit_id2之间的提交

    $ git cherry-pick 5008ccd..2e443af
    Auto-merging a
    [branch2 81d11b2] 3
     Date: Tue Apr 26 13:39:07 2022 +0800
     1 file changed, 1 insertion(+)
    Auto-merging a
    [branch2 bb2e941] 4
     Date: Tue Apr 26 13:39:14 2022 +0800
     1 file changed, 1 insertion(+)
    
    $ git log branch2 --oneline
    bb2e941 (HEAD -> branch2) 4
    81d11b2 3
    974d4e9 1
    cb86ba1 (master) bak a
    a119a6c (tag: v1.0) backup
    

    可看到此时是没有commid_id1的,也就是没有commit(5008ccd)。

    将多个commit pick过来的方法为git cherry-pick commit_id1^..commit_id2,获取得到的commit为[commit_id1, commit_id2],即commit_id1开始到commit_id2之间的提交

    $ git cherry-pick 5008ccd^..2e443af
    [branch2 6cbfd17] 2
     Date: Tue Apr 26 13:38:59 2022 +0800
     1 file changed, 1 insertion(+)
    [branch2 8916981] 3
     Date: Tue Apr 26 13:39:07 2022 +0800
     1 file changed, 1 insertion(+)
    [branch2 a5947a7] 4
     Date: Tue Apr 26 13:39:14 2022 +0800
     1 file changed, 1 insertion(+)
    
    $ git log branch2 --oneline
    a5947a7 (HEAD -> branch2) 4
    8916981 3
    6cbfd17 2
    974d4e9 1
    cb86ba1 (master) bak a
    a119a6c (tag: v1.0) backup
    

    如上所示可达到目的将commit_id, (commit_id1, commit_id2],[commit_id2]一个或者多个提交pick到指定分支,可避免手动再改动一遍的辛苦,更能避免修改的不完成造成的隐患。

    总结

    git cherry-pick commit_id
    git cherry-pick commit_id1..commit_id2
    git cherry-pick commit_id1^..commit_id2
    
  • 相关阅读:
    恢复安装数据库的SCOTT用户的数据:
    SQL Server DATEDIFF() 函数
    MS SQL 日期格式转换
    cxGrid增加一栏显示checkBox的设置方法
    介绍JSP程序动态网站环境搭建的详细步骤
    SQL Server CONVERT() 函数
    最新JSP环境配置方法
    JSP语法(Jsp技术大全)1
    SQL字符串处理函数大全
    JSP数据库连接
  • 原文地址:https://www.cnblogs.com/faithlocus/p/16194525.html
Copyright © 2020-2023  润新知