背景:
一直以为 git cherry-pick <branchname>git rebase <branchname>是一样效果。今天在使用 cherry-pick <branchname> 的时候,发现了一些异常,与之前的认知不同。于是就去了解了一下这两者的区别。

cherry-pick <branchname>rebase <branchname>

git cherry-pick [xx]; 这里的 [xx] 一般都是一个 commit id,但是这里写成一个 branch name 也可以,git 支持这种表达方式。这种支持其实是一个误导,会误导使用者以为这样跟 rebase <branchName> 是一样的效果。

先给出结论:

  1. cherry-pick <branchname> 的使用,实际上是把这个 <branchname> 的最后一笔提交 pick 过来了。假设最后这个branchName上面的最后一笔提交的commmit id447561a,那么这个 cherry-pick <branchname> 准确表达是 cherry-pick 447561a; 两者的作用完全一样,没任何区别;
  2. rebase <branchName> 的使用,就不只是把最后一笔pick 过来了,它会先找当前分支与目标分支的一个公共的基点,然后从目标分支的这个 commit id开始到目标分支的最后一笔commit id(不包含公共的那个 commit id),一笔一笔的 pick 进当前的分支;
  3. rebase 会把这些目标分支的这些提交插入到当前分支的公共基点上,而不是你目标分支的最新的提交上; 而 cherry-pick 总是会将这些提交插入到你当前分支的最新的节点上。

ps: git cherry-pick ..<branchName> 作用与git rebase <branch name>类似,也是从公共基点开始,直到目标分支的最后一笔,把目标分支的这些提交全部pick过来。但是区别就是上面 第3点所说的,开始插入的位置不同。cp 总是直接插入到当前分支的最后一个节点之上;而rebase是从公共基点之上开始插入。(当然,如果你当前分支的最后一笔实际上就是公共基点,那么两者的效果是一样的。)


参考文档:

  • git cherry-pick
  • git cherry-pick 教程

git cherry-pick branch 与 git rebase branch 的区别相关推荐

  1. git cherry pick

    直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...

  2. IDEA git cherry pick 简单使用

    cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...

  3. 【git cherry pick冲突】

    修好了bug愉快的打算commit提交的时候 看到提示语句是can not commit changes due to unresolved conflicts 在Android Studio中寻找图 ...

  4. Git使用中报错fatal: The current branch master has no upstream branch.解决方案

    在push代码时,出现"git master branch has no upstream branch"问题的原因是没有将本地的分支与远程仓库的分支进行关联.如下图所示: 具体原 ...

  5. Git master branch has no upstream branch的解决

    Git master branch has no upstream branch的解决 在push代码时,出现"git master branch has no upstream branc ...

  6. git push错误(fatal: The upstream branch of your current branch does not match)解决方案

    有时候通过git push命令时会提示不成功,错误提示如下: localhost:lean-server alioo$ git push fatal: The upstream branch of y ...

  7. 【Git】Git 分支管理 ( 创建并切换分支 | 查看分支 git branch | 合并分支 git merge dev | 删除分支 git branch -d dev )

    文章目录 一.创建并切换分支 1.创建分支 git branch dev 2.切换分支 git checkout dev 3.创建并切换分支 git checkout -b dev 二.查看分支 gi ...

  8. Git - 团队合作利器 Branch 与 Git Flow

    [原文地址]:从0开始学习 GitHub 系列之「团队合作利器 Branch」 Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖 ...

  9. git在commit提交时报:On branch master Changes not staged for commit

    git在commit提交时报:On branch master Changes not staged for commit 之前使用SVN进行代码管理,现在突然切换到Git还不太习惯.今天自己在学习使 ...

最新文章

  1. 2020年智能车竞赛暑期工作计划一览表各
  2. 子元素是字典列表转成字典
  3. 高薪寻人 | 2018 “神策杯”高校算法大师赛 6 强诞生,【招人】进行时……
  4. Android游戏开发的入门实例
  5. python3.6 安装opencv_MacOS的Python3.6下安装OpenCV3.2.0
  6. 史上最全的Nginx配置参数中文说明
  7. MVC 之var与dynamic
  8. vs自带iis局域网调试
  9. 数据结构与算法题整理
  10. bzoj 1662: [Usaco2006 Nov]Round Numbers 圆环数(枚举)
  11. [No0000EB]C# 数组(Array)
  12. 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
  13. java代码实现一个月内不再提醒,通用到期问题
  14. 取消全部呼叫转移代码_中国移动的卡取消呼叫转移的快捷方式是什么?
  15. ORA-20011: Approximate NDV failed: ORA-00600: internal error code, arguments
  16. JVM学习--垃圾回收机制
  17. MC34063降压电路
  18. mysql sumif函数的使用方法_用sumif函数如何求平均值
  19. 程序员高效率工作工具归纳(上)
  20. python和verilog对接_用这个库居然可以使用Python进行FPGA逻辑开发

热门文章

  1. MATLAB虫害检测农业应用设计
  2. java NIO BIO和AIO
  3. 叉乘点乘混合运算公式_初中数学根式运算法则公式
  4. Dictionary Learning(字典学习、稀疏表示以及其他)
  5. Mybatis——动态sql
  6. 一篇文章理解Promise原理
  7. deform服务器位置,Deform V11 自动多工步分析(MO)设置详解-工艺成型及仿真
  8. Altium Designer21 的安装过程
  9. 滲透测试ATTCK攻击模型三(Initial Access 初始访问)
  10. EPI晶片的表面微观粗糙度对湿化学处理的依赖性