git cherry-pick branch 与 git rebase branch 的区别
背景:
一直以为 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>
是一样的效果。
先给出结论:
cherry-pick <branchname>
的使用,实际上是把这个<branchname>
的最后一笔提交pick
过来了。假设最后这个branchName
上面的最后一笔提交的commmit id
是447561a
,那么这个cherry-pick <branchname>
准确表达是cherry-pick 447561a
; 两者的作用完全一样,没任何区别;rebase <branchName>
的使用,就不只是把最后一笔pick
过来了,它会先找当前分支与目标分支的一个公共的基点,然后从目标分支的这个commit id
开始到目标分支的最后一笔commit id
(不包含公共的那个commit id
),一笔一笔的pick
进当前的分支;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 的区别相关推荐
- git cherry pick
直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...
- IDEA git cherry pick 简单使用
cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...
- 【git cherry pick冲突】
修好了bug愉快的打算commit提交的时候 看到提示语句是can not commit changes due to unresolved conflicts 在Android Studio中寻找图 ...
- Git使用中报错fatal: The current branch master has no upstream branch.解决方案
在push代码时,出现"git master branch has no upstream branch"问题的原因是没有将本地的分支与远程仓库的分支进行关联.如下图所示: 具体原 ...
- Git master branch has no upstream branch的解决
Git master branch has no upstream branch的解决 在push代码时,出现"git master branch has no upstream branc ...
- 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 ...
- 【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 ...
- Git - 团队合作利器 Branch 与 Git Flow
[原文地址]:从0开始学习 GitHub 系列之「团队合作利器 Branch」 Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖 ...
- git在commit提交时报:On branch master Changes not staged for commit
git在commit提交时报:On branch master Changes not staged for commit 之前使用SVN进行代码管理,现在突然切换到Git还不太习惯.今天自己在学习使 ...
最新文章
- 2020年智能车竞赛暑期工作计划一览表各
- 子元素是字典列表转成字典
- 高薪寻人 | 2018 “神策杯”高校算法大师赛 6 强诞生,【招人】进行时……
- Android游戏开发的入门实例
- python3.6 安装opencv_MacOS的Python3.6下安装OpenCV3.2.0
- 史上最全的Nginx配置参数中文说明
- MVC 之var与dynamic
- vs自带iis局域网调试
- 数据结构与算法题整理
- bzoj 1662: [Usaco2006 Nov]Round Numbers 圆环数(枚举)
- [No0000EB]C# 数组(Array)
- 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
- java代码实现一个月内不再提醒,通用到期问题
- 取消全部呼叫转移代码_中国移动的卡取消呼叫转移的快捷方式是什么?
- ORA-20011: Approximate NDV failed: ORA-00600: internal error code, arguments
- JVM学习--垃圾回收机制
- MC34063降压电路
- mysql sumif函数的使用方法_用sumif函数如何求平均值
- 程序员高效率工作工具归纳(上)
- python和verilog对接_用这个库居然可以使用Python进行FPGA逻辑开发