首页 > 其他分享 >Git Cherry-pick使用

Git Cherry-pick使用

时间:2023-08-12 11:45:30浏览次数:39  
标签:git Cherry pick fruit Git 提交 cherry

概述

无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难。有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交。这个过程被称为 "挑拣", 即 Cherry-pick。

本文将介绍 "Cherry-pick" 的内容、原因和方法。

让我们开始吧~

什么是 Cherry-pick?

通过 cherry-pick 命令,Git 可以将任何分支中的选定提交合并到当前的 Git HEAD 分支中。

在执行 git mergegit rebase 时,一个分支的所有提交都会被合并。而 cherry-pick 命令则允许你选择单个提交进行整合。

区别图示如下:

使用 merge 或 rebase 的情况
△ 使用 merge 的情况: 在执行 merge 或 rebase 时,一个分支的所有提交都会被整合。

使用 cherry-pick 的情况
△ 使用 cherry-pick 的情况: 允许你选择个别提交进行整合。在本例中,只有 C2 被整合到主分支,而不是 C4。

为什么要用 Cherry-pick?

下面的情况可能更容易理解 "Cherry-pick" 的作用。

想象一下,您正在为即将到来的每周 spring 实施新功能。代码准备就绪后,您将把它推送到远程分支,准备进行测试。

然而,客户并不满意所有的修改,要求你只提交某些修改。因为客户还没有批准下次发布的所有修改,所以 git rebase 不会产生预期的结果。因为 git rebasegit merge 会将上一次冲刺的所有调整都纳入其中。

而 "Cherry-pick" 就能解决这个问题!因为 "Cherry-pick" 只关注提交中添加的改动,所以它只会带来已批准的改动,而不会添加其他提交。

使用 "Cherry-pick" 还有其他一些原因:

  • 这对修复 bug 非常重要,因为开发分支中的 bug 都是用它们的提交设置的。
  • 通过使用 git cherry-pick,而不是其他应用指定提交的改动的选项(如 git diff),可以避免不必要的争斗。
  • 如果因为各 Git 分支的版本不兼容而无法进行完整的分支合并,它就是一个很有用的工具。

什么时候用 Cherry-pick?

简而言之就是:尽量少用。之所以要尽量少用 cherry-pick,是因为它很容易产生 "重复"提交:当你使用 cherry-pick 将一个提交整合到 HEAD 分支时,Git 必须创建一个内容完全相同的新提交。不过,这是一个全新的提交对象,有自己的 SHA 标识符。同时也会失去跟踪提交历史的能力。

如果你不按顺序提交了很多提交,这些提交就会被记录在你的分支中,这可能会导致你的 Git 分支出现不理想的结果。

只要能用传统的合并或重置来整合,就应该这么做。Cherry-pick 应保留给不可能这样做的情况,例如必须创建 Hotfix 或只想从一个废弃的分支中保存一个或几个提交。

如何使用 Cherry-pick 命令?

流程概述

下面是使用步骤:

  1. 拉取本地分支。使用 git fetch
  2. 回到要合并的分支。你可能会通过运行 git checkout main 来做到这一点。
  3. 找到要拉入分支的提交。转到 git log,为每条提交获取唯一的提交哈希值。
  4. "Cherry-pick" 您想要加入该分支的提交。运行以下命令:git cherry-pick <commit sha>。这将只把这个提交拉入当前分支。
  5. (可选) 在某些情况下, 可能需要手动解决冲突.
  6. 像往常一样推送这个分支: git push origin main

具体命令

cherry-pick 命令的最简单形式中,你只需使用要集成到当前 HEAD 分支中的提交的 SHA 标识符即可。

要获取提交哈希值,可以使用 git log 命令:

git log --oneline

知道 commit 的哈希值后,就可以使用 cherry-pick 命令。

语法如下:

git cherry-pick <commit sha>

标签:git,Cherry,pick,fruit,Git,提交,cherry
From: https://www.cnblogs.com/east4ming/p/17624569.html

相关文章

  • github 无语的问题,Host does not existfatal: Could not read from remote repository
    Unabletoopenconnection:Hostdoesnotexistfatal:Couldnotreadfromremoterepository.image.pngimage.pngimage.pngPleasemakesureyouhavethecorrectaccessrightsandtherepositoryexists.如果githubdesktop和gitpu......
  • 搭建Git服务器
    搭建Git服务器参考教程:从远程库克隆-廖雪峰的官方网站(liaoxuefeng.com)Git服务器搭建|菜鸟教程(runoob.com)【git】新电脑(Windows)中Git配置SSH公钥远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。GitHub就是一个免费托管开源代码的远程......
  • Git
    Git操作Git相关配置gitconfig--globaluser.name"用户名"gitconfig--globaluser.email"有效的邮箱地址"Git基础操作初始化本地仓库gitinit​ 在文件夹内使用该命令后,会新增一个.git文件夹查看文件的状态gitstatus​ 进入本地版本查看工作区、暂存区......
  • Git的基本使用
    此次仿真试验主要集中于gitee上进行1、单人项目开发  gitadd.                //表示将所有代码提交至暂存区     gitcommit-m"提交信息"  //将代码提交至本地仓库,注意提交的附加信息不可或缺     gitpu......
  • Pycharm配置git
    原文链接:https://www.jianshu.com/p/ae92970d20621.下载Gitee插件同样在设置页面,选中Plugins,并搜索Gitee安装。安装后,重启一下Pycharm。在VersionControl中会增加Gitee选项。2.配置Git账号在上一步新增的VersionControl>Gitee,添加你的账号密码。添加账号密码;......
  • Github编辑TOC目录
    任意1-6个#标注的标题都会被添加上同名的锚点链接 [标题1](#标题1) [标题2](#标题2) [标题3](#标题3) #标题1 ##标题2 ###标题3锚点跳转的标识名称,可使用任意字符,大写字母要转换成小写 [Github标题1](#github标题1) ###Github标题1多单词锚点的空格用-......
  • 两分钟带你学会ssh免密登录(git)
    欢迎访问幸福拾荒者,一个前端知识总结分享平台,与大家一起共同成长共同进步!......
  • chatGPT3.5搭建git
    https://github.com/Chanzhaoyu/chatgpt-webdocker-compose.yamlversion:'3'services:app:image:chenzhaoyu94/chatgpt-web#总是使用latest,更新时重新pull该tag镜像即可ports:-10.0.0.250:3232:3002environment:#二选一......
  • SourceTree git报错 这是一个无效源路径/URL的
    首先根据网上查询的资料排查账号信息,账号信息正常,git客户端也安装了 解决问题:git支持未打开  未打开的样式类似下面 ......
  • gitea ci/cd
    1.建立目录mkdir-p/data/{gitea,act_runner}2.docker-compose.ymlversion:"3"networks:custom-local-net:driver:bridgeipam:config:-subnet:"172.16.0.0/18"gateway:"172.16.0.1"servic......