Git分支自动合并脚本:基于时间戳的冲突解决方案

news/2025/3/14 18:36:03/文章来源:https://www.cnblogs.com/yz-blog/p/18772638

前言

在团队开发中,分支合并是一个常见但又令人头疼的问题。特别是当多个分支同时对同一文件进行修改时,解决合并冲突往往需要手动干预。今天给大家分享一个基于时间戳的自动分支合并脚本,它能够自动处理合并冲突,大大提高工作效率。

功能特点

  1. 自动合并指定的源分支到目标分支
  2. 基于最后修改时间戳自动解决冲突
  3. 支持详细日志输出
  4. 提供演习模式(dry-run)
  5. 可自定义冲突文件列表输出路径
  6. 完善的错误处理和状态检查

使用方法

基本用法

./merge-branches.sh <目标分支> <源分支>

支持的选项

  • -h, --help:显示帮助信息
  • -v, --verbose:显示详细的执行过程
  • -d, --dry-run:演习模式,不实际执行合并
  • -o, --output FILE:指定冲突文件列表的输出文件

使用示例

# 将develop分支合并到main分支
./merge-branches.sh main develop# 详细模式下合并
./merge-branches.sh -v master feature# 演习模式,不实际执行
./merge-branches.sh -d main develop

  

工作原理

1. 参数解析

脚本首先解析命令行参数,支持多种参数格式,包括简短形式(如-h)和完整形式(如--help)。

2. 分支检查

在执行合并之前,脚本会:

  • 验证源分支和目标分支是否存在
  • 检查当前所在分支
  • 必要时自动切换到目标分支

3. 冲突解决策略

当遇到合并冲突时,脚本会:

  • 获取冲突文件列表
  • 对每个冲突文件:
  • 获取两个分支中该文件的最后修改时间
  • 比较时间戳,选择最新的版本
  • 自动添加解决后的文件到暂存区

4. 合并提交

  • 如果没有冲突,直接创建合并提交
  • 如果有冲突,在解决后创建带有说明的合并提交
  • 保存冲突文件列表到指定文件

完整代码

#!/bin/bash# 启用详细日志
set -x# 确保我们在正确的分支上
current_branch=$(git symbolic-ref --short HEAD)
echo "当前分支: $current_branch"if [ "$current_branch" != "hbjt-test-merged" ]; thenecho "请先切换到 hbjt-test-merged 分支"exit 1
fi# 创建临时文件来存储冲突文件列表
conflict_files="conflict-files.txt"
echo "创建冲突文件列表: $conflict_files"
> "$conflict_files"# 开始合并,但不自动提交
echo "开始合并 hb-test 分支..."
git merge --no-commit hb-test || true# 获取所有冲突文件
echo "检查冲突文件..."
conflicted=$(git diff --name-only --diff-filter=U)
echo "发现的冲突文件:"
echo "$conflicted"# 如果有冲突文件
if [ ! -z "$conflicted" ]; thenecho "===== 发现冲突文件,正在根据时间戳处理... ====="# 遍历每个冲突文件echo "$conflicted" | while read file; doecho "------------------------------"echo "处理文件: $file"echo "$file" >> "$conflict_files"# 获取两个分支中文件的最后修改时间current_time=$(git log -1 --format="%at" hbjt-test-merged -- "$file" 2>/dev/null || echo "0")incoming_time=$(git log -1 --format="%at" hb-test -- "$file" 2>/dev/null || echo "0")echo "hbjt-test-merged 分支最后修改时间: $(date -d @$current_time)"echo "hb-test 分支最后修改时间: $(date -d @$incoming_time)"if [ "$incoming_time" -gt "$current_time" ]; thenecho "使用 hb-test 分支的 $file"git checkout --theirs "$file"elseecho "使用 hbjt-test-merged 分支的 $file"git checkout --ours "$file"fi# 标记文件为已解决echo "标记 $file 为已解决"git add "$file"done# 完成合并echo "===== 提交合并结果 ====="git commit -m "合并 hb-test 到 hbjt-test-merged,解决冲突基于时间戳"echo "合并完成!冲突文件列表已保存到 $conflict_files"
else# 如果没有冲突,直接提交echo "===== 没有发现冲突,直接提交 ====="git commit -m "合并 hb-test 到 hbjt-test-merged,无冲突"echo "合并完成!没有发现冲突"
fi# 显示最终状态
echo "===== 合并结果 ====="
git status 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898797.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据前序遍历和后序遍历计数二叉树

我们知道,对于一个二叉树,如果我们我们知道他的前(或后)序遍历和中序遍历,那就可以直接构造还原出完整的二叉树。中序遍历很重要。 那么给定一个树的前序遍历和后序遍历,能不能构造出这个树呢?一般是不行的,参考往期文章 https://www.cnblogs.com/ofnoname/p/16864200.…

使用Micrometer与prometheus集成监控jvm

1.简介Micrometer 是一个用于收集和报告指标的 Java 库,广泛用于 Spring Boot 和其他 Java 应用。它提供了对系统各项资源的监控支持,包括但不限于 JVM、内存、垃圾回收、线程池、HTTP 请求 等。Micrometer 支持与多种监控系统的集成,例如 Prometheus、InfluxDB、Datadog 等…

3.14 二重积分

1 1.1 概念引入1.2 分、匀、和、均 分割:把XOY平面分割成若干个小区域,相应的,把柱体分割成n个小的曲顶柱体 取近似:取某一小块的一个点,通过函数关系确定此点的高,体积就等于此处的面积*高 作和:把每一小块的体积加起来,作为曲顶柱体的体积 取极限:设λ,λ趋近于0,…

Livox MID-70连接及使用

一、Livox MID-70连接及使用 参考链接 1.ubuntu18.04安装下载 2.Ros下载 3.Livox_viewer下载 去官网下载livox_viewer,Windows和Linux版本都有。livox_viewer不需要SDK和ros_driver即可使用。 Ps:这里我们选择livox viewer1,不要选择版本2,否则可能面临一个硬件和驱动跟不上…

使用C#创建一个MCP客户端

前言 网上使用Python创建一个MCP客户端的教程已经有很多了,而使用C#创建一个MCP客户端的教程还很少。 为什么要创建一个MCP客户端呢? 创建了一个MCP客户端之后,你就可以使用别人写好的一些MCP服务了。 效果展示 为了方便大家复现,我没有使用WPF/Avalonia之类的做界面。只是…

Maven JavaFX使用SCSS样式表

原理 JavaFX本身的CSS解析器不支持SCSS,因此我们需要在编译阶段将SCSS文件编译为CSS文件,然后在JavaFX中引入CSS文件。 本文使用的编译插件是sass-cli-maven-plugin。 使用 POM文件设置 代码如下: <build><plugins><plugin><groupId>us.hebi.sass&l…

linux中如何判断一个rpm是手动安装还是通过yum安装的

现状 对于一个不熟悉的服务器或者是虽然是自己的服务器,但历史比较久远,对于上面安装了的一些软件包,我们记忆都慢慢模糊了。 我今天遇到一个情况,在安装一个工具x2openEuler时,安装失败,提示依赖冲突: [root@VM-0-6-centos x2openeuler]# yum install x2openEuler-core…

如何让你的应用在市场中脱颖而出?

开发者在完成应用开发并成功上架应用市场后,将面临一项重要挑战:如何在竞争激烈的环境中脱颖而出,吸引用户的关注?为此,提升应用的曝光度和下载量至关重要。 HarmonyOS SDK应用市场服务(Store Kit)提供应用市场业务的对外开放能力,针对想要获得曝光的应用,Store Kit提…

阿里通义实验室语音团队负责人鄢志杰离职;苹果计划在 AirPods 上配备实时对话翻译功能丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

OP90-1工作原理

step1.压紧弹簧及产品 上下气缸压紧弹簧,产品压紧气缸压紧产品step2.弹簧钩下降 拉簧钩紧气缸伸出,带动弹簧钩下降step3.弹簧钩带动弹簧转动,下弹簧脚进槽step4.弹簧钩提起step5.弹簧钩旋转,带动弹簧越过高处,到达卡槽正上方step6.弹簧钩下降step.弹簧钩回退撤出 弹簧钩回…

Java的volatile和sychronized底层实现

1. 概览 从Java代码级别到硬件级别各层都是如何实现的2. Synchronized 2.1 字节码层面 使用javap -verbose <class文件>可以查看到字节码信息,其中synchronized方法会有flags:ACC_SYNCHRONIZED,此时字节码中不会包含monitorenter和moniotrexit,JVM会自动加 public syn…

信息资源管理文字题之“服务支持类的五大运营流程图”

一、为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理理念和方法,包括IT服务管理,下图为LX集团IT服务管理中服务支持类的五大运营流程图 要求:将图中标有序号的空白处的正确能容,按序号填写 二、答案变更请求 最终软件库 配置管理数据库 影响分析 授权 变…