zoukankan      html  css  js  c++  java
  • git cherry-pick. 如何把已经提交的commit, 从一个分支放到另一个分支

    实际问题: 
      在本地 master 分支上做了一个commit ( 38361a68138140827b31b72f8bbfd88b3705d77a ) , 如何把它放到 本地 old_cc 分支上? 

    办法之一: 使用 cherry-pick.  根据git 文档:

    Apply the changes introduced by some existing commits 

    就是对已经存在的commit 进行apply (可以理解为再次提交)

    简单用法:

    git cherry-pick <commit id>
     


    例如:
    $ git checkout old_cc
    $ git cherry-pick 38361a68     # 这个 38361a68 号码,位于:

     
    $ git log 
    commit 38361a68138140827b31b72f8bbfd88b3705d77a 
    Author: Siwei Shen <siwei.shen@focusbeijing.com>
    Date:   Sat Dec 10 00:09:44 2011 +0800


    1. 如果顺利,就会正常提交。结果:

    Finished one cherry-pick.
    # On branch old_cc
    # Your branch is ahead of 'origin/old_cc' by 3 commits.


    2. 如果在cherry-pick 的过程中出现了冲突

    Automatic cherry-pick failed.  After resolving the conflicts,
    mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
    and commit the result with: 

            git commit -c 15a2b6c61927e5aed6718de89ad9dafba939a90b


    就跟普通的冲突一样,手工解决:
    2.1 $ git status    # 看哪些文件出现冲突

    both modified:      app/models/user.rb 


    2.2 $ vim app/models/user.rb  # 手动解决它。 
    2.3 $ git add app/models/user.rb
    2.4 git commit -c <新的commit号码>

    =================================================== 

    git 的错误操作,导致丢失了重要的commit,真是痛不欲生; 
    最后通过git神器终于找回了丢失的commit,但是需要总结和反思的地方有一些,同时需要加深git的学习,特献上本文以供参考 

    执行git reset --hard HEAD~1 ,删除了commit3,但是发现reset错了,晕菜了…… 
    还好有后悔药(感叹git的强大啊,神马意外情况都考虑到了)满血恢复commit3,执行如下步骤: 

    Java代码  收藏代码
    1. git reflog  
    2. 502dd0f HEAD@{0}: HEAD~1: updating HEAD  
    3. 147b3b5 HEAD@{1}: commit: test3  
    4. 502dd0f HEAD@{2}: commit: test2  
    5. 0692c03 HEAD@{3}: commit (initial): test1  
    6.   
    7. git reset --hard 502dd0f  
    8. git cherry-pick 147b3b5  



    丢失的commit3终于回来啦~~~~ 
    虽然有利器,但是需要总结和反思的是,慎用reset hard啊,实在不行reset merge也是不错的选择。 

    原文:http://sg552.iteye.com/blog/1300713

    参考:http://dmouse.iteye.com/blog/1797267

  • 相关阅读:
    拨号进入防盗界面
    手机开机或启动广播接收者
    time、datetime
    py 包和模块,软件开发目录规范
    递归函数
    匿名函数,内置函数
    三元表达式,列表生成式,生成器生成式
    迭代器,生成器
    XPath
    闭包,装饰器
  • 原文地址:https://www.cnblogs.com/veins/p/3906582.html
Copyright © 2011-2022 走看看