Git 之 Cherry-Pick

什么是摘樱桃? 在分支协作中,出现以下这种情况,假设我的 main 分支只想要 feat 分支的 E 或者 F 的改动,此时就需要用到像摘樱桃一样给那几个提交摘过来(一个个小提交就像小樱桃),也就是 cherry-pick。 理解起来不难,但在实际操作中,还是有一些小问题的。我把目前摘樱桃的情况归为三类: 第一类是无冲突直接摘,例如 E 提交创建了一个新文件,这时 main 直接摘 E 过来是没问题的。 第二类是假设 F 是基于 E 的改动,但是我摘的时候,只摘了 F 过来,没有摘 E,此时摘樱桃操作会卡住。 第三类是你摘过来的提交和你本地的提交产生了冲突,此时需要解决冲突,cherry-pick 操作会卡住。 无冲突直接摘 这个没什么好说的,很简单,所以这里介绍一下几个 cherry-pick 的命令,分别是 git cherry-pick A // 只摘提交 A git cherry-pick A..B // 摘提交(A, B] git cherry-pick A^..B // 摘提交[A, B] git cherry-pick --abort // cherry-pick 操作终止,回滚 git cherry-pick --continue // 解决冲突后,cherry-pick 操作继续执行 所摘提交的依赖提交未摘 现在 feat 分支中有一个 main 分支中不存在的文件 READMEX.md,feat 中分别有两个提交,提交 A 是创建文件并写入一些内容,提交 B 是在文件中追加了一些内容。 ...

October 28, 2025 · 小石堆

解析 Rebase & Merge

老 merge 了,但 rebase 弱的一逼,面试被问到,遂复盘 场景 小 A 在 feat1 分支开发,他肯定不能直接在 main 上做修改(为了保护项目的安全性),此时,为了防止大量的冲突,小 A 每次开发前都要拉去 main 分支的代码来看看,没啥冲突就直接合入,这样能有效避免积压大量的冲突。 此时就有问题了,git 中有两种合入代码的方式,分别是 merge 和 rebase,对应命令如下 git merge origin/main git rebase origin/main 到底用哪一个呢?小 A 挠挠头。 这里先给出一个方案,如果你是 main / master 分支的维护者,尽量使用 Merge,如果你是要维护自己的分支,可以用 Rebase,原因我们娓娓道来。 GitGraph GitGraph 是直观的 Git 多分支提交记录的展示,下面是一张示意图 在 GitGraph 中一条分叉就是一个分支,比如说上图,从 C 这个提交分出了一个 Feat 分支,也就是说,Feat 分支拥有含 C 之前的所有 Main 的提交,从 C 之后,Main 和 Feat 形同陌路。 Merge 合入 OK,我们先简单看看,基于上面这张 GitGraph,如果说在小 A 执行 merge 操作,会发什么? 很直观,如果执行 merge,会基于 main 分支的最新提交和 feat 分支的最新提交,进行合并,然后形成一个新的提交,非常直观。 ...

October 27, 2025 · 小石堆