用了6年git,不知道cherry-pick是啥意思

背景

可能是测试开发角色原因,平时很少有代码冲突或多人协同的编码场景。今天有个协同项目,需要提交自己的代码到其它业务的代码库中,这个代码库是分支开发分支上线模式,同时会有多个同事提交代码,然后模块负责的同学和我说了句:需要把代码cherry pick到release-internal-0718 分支,用了6年git的我一下子懵了,不知道具体怎么搞。

相关知识

我只能说好的,然后自己偷摸着学习了下:git cherry-pick的功能和使用场景。

git cherry-pick功能

git cherry-pick 是用来从一个分支中选择一个或多个特定的提交,并将这些提交应用到当前分支。这样可以只选择需要的更改,而不是合并整个分支。

复制代码
git cherry-pick <commit-hash>

git cherry-pick应用案例

场景

你有两个分支:mainfeature-branch。你在 feature-branch 上进行了多个提交,但其中有一个提交修复了一个重要的 bug,你希望将这个修复应用到 main 分支,而不合并 feature-branch 上的其他更改。

步骤

1、查看提交历史

首先,你需要找到 feature-branch 中包含修复的那个提交的哈希值。你可以通过以下命令查看 feature-branch的提交历史:

复制代码
git checkout feature-branch
git log

假设修复提交的哈希值为 abc1234

2、切换到 main 分支

接下来,你需要切换到 main 分支:

复制代码
git checkout main
3、Cherry-pick 这个提交

使用 git cherry-pick 命令将 feature-branch 中的这个修复提交应用到 main 分支:

复制代码
git cherry-pick abc1234
4、处理冲突(如果有)

如果在 cherry-pick 过程中出现冲突,Git 会提示你。你需要手动解决这些冲突,然后使用以下命令继续:

复制代码
git add .
git cherry-pick --continue

如果你想中止 cherry-pick,可以使用以下命令:

复制代码
git cherry-pick --abort
5、推送更改到远程仓库

最后,你可以将这些更改推送到远程仓库:

复制代码
git push origin main

总之,使用 git cherry-pick,你可以从一个分支中选择特定的提交并将它们应用到另一个分支。这对于只需要某些特定更改的情况非常有用,而无需合并整个分支。

其它命令介绍

git stash/git stash pop

git stash 是用来临时保存当前工作目录的修改(即使它们没有被添加到暂存区)。这样你可以在不提交的情况下切换分支或执行其他操作,而不会丢失当前的工作。

复制代码
git stash

git stash pop 是用来恢复上次被 git stash 保存的工作。它会将存储的修改应用到当前工作目录,并从 stash 列表中移除。

复制代码
git stash pop
相关推荐
hudawei99615 天前
有未保存的修改,不能切换分支
git·git stash·stash
恋喵大鲤鱼6 个月前
git stash
git·git stash
不带刺仙人球9 个月前
cherry-pic
cherry-pick
mooyuan天天1 年前
CTFHub 信息泄露通关笔记8:Git泄露 Stash(两种方法渗透)
git stash·信息泄露·ctfhub·git泄露
ezreal_pan1 年前
误在非开发分支上开发解决方案
git·cherry-pick
gqkmiss1 年前
Git Cherry-pick:核心命令、实践详解
前端·git·前端框架·commit·cherry-pick
16年上任的CTO2 年前
git进阶--6---git stash
git·git stash
安冬的码畜日常2 年前
【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中
git·ai·powershell·cherry-pick·deepseek·deepseek r1·deepseek v3
ziyu_jia2 年前
【日常开发】Git Stash使用技巧
git·git stash
trayvontang2 年前
Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)
git stash·git reset·git restore·git reflog·git核心概念·git diff·git cherry-pick