前言
前段时间,有位朋友在群里问了这样一个问题。他们开了两个分支在并行开发两个功能(以下记为A,B),但是产品突然说A分支上的功能不上线,但是A分支上有部分东西的修改是本次迭代必须的。也就是说出现了需要部分合并的情况,当时我的反应就是使用cherry-pick命令。
举个栗子
在A分支上开发功能
我们在A分支上提交若干个commit。1
2
3
4
5
6 vim a.txt
git add .
git commit -m "A分支提交"
vim b.txt
git add .
git commit -m "A分支提交"
在B分支上开发功能
我们在B分支上提交若干个commit。1
2
3
4
5
6 vim c.txt
git add.
git commit -m "B分支提交"
vim d.txt
git add .
git commit -m "B分支提交"
这个时候git仓库的commit记录是这样的。
部分合并
这个时候产品说A分支上的功能这个版本不上线。但是实际上A分支上的第一次commit是本次迭代所必须的。我们需要将其部分合并到B分支,我们需要找到这个commit的唯一标识。1
2
3
4
5 git checkout A
git log
git checkout B
git cherry-pick d3088c71de2
这里的d3088c71de2是在A分支上通过git log命令查找的commit的唯一标识。这个时候我们就完成了将A分支上的功能部分合并到B分支,是不是很神奇呢?我们就可以继续B功能的开发了。
cherry-pick实际上做的事情是将指定的commit复制后拼接在当前分支的commit记录后。
余生没那么长,不要一味的付出去惯那些得寸进尺的人,请忠于自己,活得像最初的模样!