前言
cherry pick. 拷贝其中的某一次提交记录.
本文就介绍一种更加快捷的方式 cherry pick
.
介绍
此方法主要用于2分支分别独立维护的情况, 即某一分支已经上线了spring-202108
, 同时也有开发spirnt-202109
. 此时如果有提交内容, 既需要提交到sprint-202108
和sprint-202109
. 此时主要有3种方式:
- 方法1: 分别在
08
和09
分支提交2次提交记录. - 方法2: 先提交到
08
上, 随后使用遴选(cherry pick)将之前的提交记录也提交一份到09
上. - 方法3: 合并分支
08
到09
上. (如果08
和09
是不同的分支, 且独立维护的话, 则此方法不合适.)
遴选使用和demo
比如我们有2个分支tmp
和tmp2
. 此时tmp
分支发生了更新<63af0ce>
, 此时我们要将本次的修改也提交到tmp2
上. 此时操作如下所示:
- 步骤1 切换当前分支到需要cherry pick到分支. (此处为
tmp2
)
- 步骤2 选择需要cherry pick的提交节点. 此处为
<63af0ce>
-
选择cherry pick(
遴选
)
-
此时如果有冲突. 会在这个头节点 解决冲突后合并
-
由于此处我处于
tmp2
(我方).tmp
也就是cherry pick
的属于他方. 所以我此处选择以他人解决冲突. (当然你也可以选择手动进行合并.)
-
遴选冲突解决后 文件情况
-
此时 提交推送即可.
总结
优点&作用
- cherry pick(
遴选
)可以将某一个的提交放置到当前分支的头部.- 操作方便快捷.
缺点
- 每次只能遴选一个分支.
缺点解决办法
缺点解决办法
- 准备一个临时分支将需要遴选的多次连续提交进行合并. 随后将提交rebase成一次提交.
- 面对多次不连续提交的情况. 看起来只能通过
多次
临时分支的依次遴选
和人肉手动合并
的方式进行解决了.
小插曲
git --no-optional-locks -c color.branch=false -c color.diff=false -c color.status=false -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v origin refs/heads/tmp2:refs/heads/tmp2
Pushing to https://github.com/GGG/letcode-all.git
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/GGG/letcode-all.git/': The requested URL returned error: 403
Completed with errors, see above
看起来是密码失效了. github
从8月13日的密码验证策略作出了改变.