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> 是一样的效果。

先给出结论:

  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是从公共基点之上开始插入。(当然,如果你当前分支的最后一笔实际上就是公共基点,那么两者的效果是一样的。)


参考文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值