当前位置: 首页 > 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.dtcms.com/a/284793.html

相关文章:

  • 研发知识系统选型实战:从 Notion 到 Gitee Wiki 的迭代经验
  • Python中with的作用和用法
  • 前端之HTML学习
  • Python可迭代对象与迭代器详解 - 深入理解Python迭代机制
  • DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?
  • 【C语言】动态内存管理全解析:malloc、calloc、realloc与free的正确使用
  • AR技术赋能石化巡检:安全高效新引擎
  • linux-SSH
  • 2025年广东食品生产高级证考试题
  • Python特殊方法完全指南 | 掌握魔术方法提升编程能力
  • 性能监控(一)性能监控核心概念、核心指标
  • SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言!
  • 藏语识别技术:让古老智慧触手可及的AI突破
  • 前缀和题目:表现良好的最长时间段
  • 快慢指针的应用
  • 5种禁止用户复制的实用方案
  • C++网络编程 4.UDP套接字(socket)编程示例程序
  • UNISOC8850平台Log工具使用说明
  • 基于python和neo4j构建知识图谱医药问答系统
  • Cursor开发步骤
  • 大模型狂想曲:当AI学会“思考”,世界如何被重塑?
  • 用aws下载NOAA的MB文件
  • 【LeetCode 热题 100】230. 二叉搜索树中第 K 小的元素——中序遍历
  • 基于邻域统计分析的点云去噪方法
  • C++ 回调函数全面指南:从基础到高级应用场景实战
  • Junit5
  • 分区表设计:历史数据归档与查询加速
  • ffmpeg转dav为mp4
  • FFmpeg 直播推流
  • 网络编程-java