当前位置: 首页 > news >正文

git merge-base查看某个分支从哪里拉出来的、主main分支上的某个时间之后某人的提交合并到特定分支(使用 cherry-pick 的场景)

需求:git merge-base查看某个分支从哪里拉出来的

在执行合并时,知道两个分支的公共基础可以帮助理解它们的差异,从而更好地解决潜在的合并冲突。

通过查找公共祖先,可以确定一个分支自公共祖先以来所做的具体更改。

例如,如果要准确找到 origin/release/1.2 是从哪个分支创建的,您可以结合使用 git loggit merge-base 来确认其历史。通过使用 git merge-base,您可以清楚地理解不同分支之间的关系和共同点,有助于在版本管理中做出更有效的决策

git merge-base 命令

git merge-base 命令用于查找两个或多个提交(通常是分支)的公共祖先。这个命令在处理合并、重放历史、或者理解不同分支之间的关系时非常有用。

查找公共祖先

git merge-base origin/release/1.2 origin/main  # 以 main 为例

结合 git show 来查看公共祖先的详细信息

git show <commit_hash>

在 Git 的日志可视化工具中,不同的颜色通常用来表示不同的提交状态或分支关系。

  • 每一条不同颜色的线,代表一个不同的分支或提交轨迹。
  • 颜色没有固定语义,每种颜色只是为了让分支和合并关系更容易区分。比如,主干、功能分支、合并提交都会用不同颜色显示,不同工具用色有差异。

需求:主main分支上的某个时间之后某人的提交合并到特定分支

只想将 x 月x 号之后的自己在 main 分支上的提交合并到 release/1.2 分支

git log --oneline --author="your_username" --after="2025-07-03" main

确保将 "your_username" 替换为您的真实用户名。

如果确认所有的提交都是自己的且连续,可以直接使用范围 cherry-pic

git cherry-pick 1e433962f^..7cabf1964

注意:一般这种情况少,尤其团队人多提交频繁下,你的commits之间肯定有别人的提交。这个方法就不适用了。

使用 xargs 改进批量 cherry-pick

切换到目标分支

   git checkout release/1.2

执行以下命令以批量 cherry-pick

git log --oneline --author="yourgitname" --after="2025-07-03" main --pretty=format:"%H" | xargs git cherry-pick
  • 这部分命令会输出自 07 月 03 日以来,所有您作为作者的提交的哈希值,并以一行一种格式列出,仅包含哈希值。
    | xargs git cherry-pick
    xargs 是一个非常有用的命令行工具,它通常用于将标准输入(stdin)转化为命令行参数来执行指定的命令。
    xargs 可以把它们分批执行,避免单个命令行参数过长的情况。

通过管道将结果传递给 xargs,并自动将所有这些哈希值传递git cherry-pick 命令。

这里 xargs 只会使用 git log 输出中的哈希,因此 确保只对您自己的提交进行 cherry-pick

如果您决定不继续操作,可以使用 git cherry-pick --abort 来放弃当前操作并返回到 cherry-pick 前的状态。

在处理大量提交时,使用 cherry-pick 可能并不是最佳选择。当来源分支上有大量提交时,直接方式 merge 更为高效。在合并过程中,通常只需解决一次冲突,而不是在每个 cherry-pick 中反复处理,尤其是如果这些提交之间存在相互依赖的情况下。这种做法将所有变更合并到目标分支,而无需一个个选择,使得操作更加简单。

在实际工作中,您可以根据改动的大小、团队开发的结构和管理需求来选择合适的方法。

使用 cherry-pick 的场景

  • 选择性提取提交:当您只希望将特定的某几个提交或特性(features)引入目标分支,而不是所有的更改时,cherry-pick 是非常有用的。
  • 需要保持分支历史:当希望特定的提交历史在不同的分支中存在时,cherry-pick 可以帮助实现。
  • 合并冲突较少:如果您确定将某些提交移植过去时没有冲突,cherry-pick 更简单快捷。
http://www.lryc.cn/news/591587.html

相关文章:

  • 【MySQL事务】事务的隔离级别
  • 逆向破解京东评论加密参数|Python动态Cookie解决方案
  • 开源Agent平台Dify源码剖析系列(五)核心模块core/agent之CotChatAgentRunner
  • 文字转图片的字符画生成工具
  • 今日行情明日机会——20250717
  • Web3.0 实战项目、简历打造、精准投递+面试准备
  • springboot 整合spring-kafka客户端:SASL_SSL+PLAINTEXT方式
  • 流式数据处理实战:用状态机 + scan 优雅过滤 AI 响应中的 `<think>` 标签
  • 面试高频题 力扣 200.岛屿数量 洪水灌溉 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • 【Lua】题目小练1
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
  • yolo8+ASR+NLP+TTS(视觉语音助手)
  • RK3566开发板调试记录:从编译配置到功能优化
  • 杰理AC70NN项目用脚本自定义添加.mk文件,直接链接进主Makefile脚本编译
  • 微服务的编程测评系统3-加密-日志-apifox-nacos-全局异常
  • 用Python实现神经网络(一)
  • RuoYi-Cloud 定制微服务
  • 微服务网站开发学习路线与RuoYi-Cloud实战指南
  • 迅速高效从web2到web3转型 ,开启远程工作
  • 验证损失判断过拟合情况
  • VTK体绘制中的抗锯齿技巧总结
  • LAMP迁移LNMP Nginx多站点配置全流程
  • AUTOSAR进阶图解==>AUTOSAR_SWS_BusMirroring
  • 线性回归策略
  • 水安考试:水利水电安全员 B 证考取指南及报考要求
  • OpenFeign的简单实践
  • C++11新特性(上)——右值引用,移动语义,引用折叠,完美转发,初始化列表,可变参数模版,lambda,包装器
  • 为何“白名单媒体”是性价比之选?
  • 从虚拟大脑到世界行者:具身智能与机器人控制基础
  • 抽奖错觉:游戏设计中的心理学武器