网站首页 > 精选文章 正文
git cherry-pick是一个很强大的命令,它可以将任何Git提交的内容单独拿出来,然后追加到当前HEAD快照中。比如在某一个分支中的某一次提交可以使用cherry-pick应用到另外一个分支中。git cherry-pick可以用于撤回改变。比如说某一次提交被放入了错误的分支,那么可以切换到正确的分支,然后使用cherry-pick将这次提交拿到正确的分支中。
何时使用cherry-pick
由于git cherry-pick的强大能力,反而让它在正常工作流中并不能作为最佳实践的一部分。一方面cherry-pick会造成重复的提交,另一方面很多可以使用cherry-pick的场景,使用merge也足够了。也就是说git cherry-pick只有在一小部分场景下作为便捷工具使用。
团队合作
一个团队中的成员经常会碰到这种场景:成员们各自都在开发一个功能的一部分代码,但是其中一些代码是通用的。也许一个功能涉及到新增和编辑同一个实体的功能,而这两个功能分配给了两个不同的开发人员。但实际上新增和编辑所依赖的实体数据模型是一致。这时候如果一名开发者已经完成了数据模型的定义,并进行了提交,另一名开发者完全可以使用git cherry-pick将这次提交引入到自己的开发分支。
Bug修复
任何时候发现了一个Bug,最重要的就是尽快将这个Bug修复并交付给线上的用户。比如当一个开发者在开发一个新功能时,发现了一个已经存在的Bug。这名开发者对其进行了修复并提交了这个修复。这次修复Bug的提交应该尽快直接通过cherry-pick合并到main分支,以减少对线上用户的影响。
撤销修改或者恢复丢失的提交
有时候feature分支也许因为过于陈旧所以不能合并到main分支。有时候merge request可能没有被合并就被关闭了。Git并不会丢失这些分支内的提交,所以通过使用git log和git reflog命令,可以找回这些分支中的有用提交,然后合并回主分支。
如何使用cherry-pick
为了展示如何使用git cherry-pick,我们假设有一个仓库,其中的分支状态如下:
a - b - c - d Main
\
e - f - g Feature
git cherry-pick使用方法非常直接,就像下面这样:
git cherry-pick commitSha
在此例中,commitSha就是对于这次提交的哈希串。可以使用git log获取提交对应的哈希串。假设我们这次操作的目的是希望将f这次提交引入到main分支。首先我们需要确保当前正在main分支上。
git checkout main
然后执行cherry-pick命令
git cherry-pick f
执行之后的分支状态会变成下面这样:
a - b - c - d - f Main
\
e - f - g Feature
f这次提交被成功的引入到主分支。
使用示例
git cherry-pick可以传入执行选项
-edit
传入-edit选项会在执行cherry-pick命令时允许用户定义提交信息(commit message)。
--no-commit
--no-commit选项会在执行cherry-pick时不创建新的提交,而仅仅是将目标提交的内容追加的当前分支的工作目录。
--signoff
--signoff选项会在cherry-pick的提交信息最后追加signoff签名
除此以外,git cherry-pick也接受各种合并策略作为选项。
另外,git cherry-pick在接受选项用于处理冲突,这些选项包括--abort --continue --quit
总结
cherry-pick在某些场景下是非常强大和方面的。但也不应该将其使用场景与git merge和git rebase混淆,它不是一个用于合并代码的正常工作流程。
原文地址:https://www.atlassian.com/git/tutorials/cherry-pick
- 上一篇: 用git rebase代替git merge,让代码脉络更清晰
- 下一篇: git的几种分支模式
猜你喜欢
- 2025-01-08 Vue+Element UI实现断点续传、分片上传、秒传
- 2025-01-08 职场上有些人就像AI,说不了几句话就丢失了上下文,无法沟通
- 2025-01-08 能跑源码,还提供数据集:这里有一个入门企业级验证码识别项目
- 2025-01-08 如何用 Netty 写一个高性能的分布式服务框架?
- 2025-01-08 cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务
- 2025-01-08 Linux 6.13内核将初步支持iPhone 8/X等旧款苹果手机芯片
- 2025-01-08 基于gitlab适用于版本发布的git-flow团队开发协作规范
- 2025-01-08 掌握GitHub:一键入门指南
- 2025-01-08 可用AI写Java程序,甲骨文推出Oracle Code Assist编程助理
- 2025-01-08 DevOps: Code编码
- 05-15OSPFv2和 OSPFv3 有哪些相同点和不同点?
- 05-15为什么IPv6不支持固定IP作为地址?
- 05-15网工必备:Ping命令的十个实用技巧
- 05-15单播以及多播的书写实验
- 05-15纯净安心+支持IPv6远程使用丨NAS部署Windows激活工具教程
- 05-15笔记09:IPv6地址配置方法三——DHCPv6有状态地址自动配置
- 05-15手把手教你DHCPv6实验
- 05-15小学生钓鱼网站渗透实战
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)