[效率提升]使用shell脚本完成一些git操作

2023-09-22 11:56:11

[效率提升]使用shell脚本完成一些git操作

根据分支名自动Add和Commit并Push到远程开发分支

例如开发分支名为: feature-xxx功能

Commit信息为:xxx功能

#!/bin/bash

# 获取当前分支名称
current_branch=$(git rev-parse --abbrev-ref HEAD)

echo "current branch: ${current_branch}"

# 去掉“feature-”后剩下的内容
commit_message=${current_branch#feature-}
echo "commit message: $commit_message"

# 提交代码并推送到远程仓库
git add .
git commit -m "$commit_message"
git push origin "$current_branch"

自动合并变化到develop分支里

同上,只是增加了将开发分支内容合并到develop分支的操作

# 判断当前分支
current_branch=$(git branch --show-current)

# 判断目标分支是否存在
target_branch=$(git branch --list develop)

echo "current branch: ${current_branch}"
echo "target branch: ${target_branch}"

# 去掉“feature-”后剩下的内容
commit_message=${current_branch#feature-}
echo "commit message: $commit_message"

git add .
git commit -m "$commit_message"
git push origin "$current_branch"

# 判断develop分支是否存在
if [ -z "$target_branch" ]; then
  echo "develop本地分支不存在"
  git checkout -b develop origin/develop
else
  git checkout develop
  git pull origin develop:develop
fi

# 合并分支
git merge --no-edit "$current_branch"

# 判断拉取更新后是否有冲突
conflict_num=$(git status --porcelain | grep '^UU' | wc -l)
echo "Conflict number: ${conflict_num}"
if [ "$conflict_num" -gt 0 ]; then
  # 把当前文件区还原到develop最新的一次commit
  git reset --hard HEAD
  echo -e "\033[41m There are conflicts, please solve them! \033[0m"
else
  echo -e "\033[42mMerge successfully!\033[0m"

  # 输入y确认push,此时可在sourcetree等工具查看合并状况,确认后再输入y执行push
  read -p "push it immediately?(y/n):" input
  input=$(echo "$input" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
  if [[ $input == "y" ]]; then

      # push上去 最后还是自己来操作比较稳妥
      git push origin develop

      echo -e "\033[42mPush OK!\033[0m"

      # 切换回原来的分支继续搬砖
      git checkout "$current_branch"
  else
      echo -e "\033[41mCancel!\033[0m"
      echo -e "\033[41mStay in develop!\033[0m"
      exit 1
  fi
fi

删除无用分支

例如每次上线都会产生一个当前日期的预发分支,时间久了就会在本地堆积很多无用分支

#!/bin/bash

# 列出所有符合条件的分支
git branch -r --list "origin/frontend-en-2023-*" | while read branch; do
  echo "$branch"
done

# 确认是否删除分支
read -p "以上分支将会被删除,是否继续(Y/N)?" choice
case "$choice" in
  y|Y )
    # 删除所有符合条件的分支
    git branch -r --list "origin/frontend-en-2023-*" | while read branch; do
      echo "当前删除的本地远程分支:${branch#origin/}"
      
      # 删除本地远程分支
      git branch -d -r "${branch}"
      
      # 删除远程分支
      # git push origin --delete "${branch#origin/}"
    done
    echo "分支已删除"
    ;;
  * )
    echo "取消删除"
    ;;
esac

查看近一个月未改动的分支

#!/bin/bash

# 检测并获取近一个月都没有变动的 Git 分支列表
function get_stale_branches {
  # 获取一个月前的时间戳
  one_month_ago=$(date -d "1 month ago" +%s)

  # 获取所有分支列表
  branches=$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/)

  # 过滤出近一个月都没有变动的分支
  stale_branches=$(awk -v one_month_ago="$one_month_ago" '$2 < one_month_ago {print $1}' <<< "$branches")

  # 返回目标分支列表
  echo "$stale_branches"
}

# 调用函数并将结果存储在变量中
stale_branches=$(get_stale_branches)

# 打印目标分支列表
printf "Stale branches:\n%s\n" "$stale_branches"
更多推荐

html综合案例2

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initi

软信天成:如何提高云数据仓库的数据质量?

随着云计算的深入普及、5G和边缘计算等技术带来了数据量的爆发增长,数据驱动商业运作向实时化和自动化迈进,越来越多的企业开始考虑嵌入基于云计算的企业数据仓库,以Snowflake、MicrosoftSynapseAnalytics、GoogleBigQuery、AmazonRedshift等为代表的云数据仓库或成为数据时

神经网络案例分析

神经网络(neuralnetwork)是一种模拟人脑神经思维方式的数据模型,神经网络有多种,包括BP神经网络、卷积神经网络,多层感知器MLP等,最为经典为神经网络为多层感知器MLP(Multi-LayerPerception),SPSSAU默认使用该模型。类似其它的机器学习模型(比如决策树、随机森林、支持向量机SVM等

STM32 CAN使用记录:FDCAN基础通讯

文章目录目的基础说明关键配置与代码轮询方式中断方式收发测试示例链接总结目的CAN是非常常用的一种数据总线,被广泛用在各种车辆系统中。这篇文章将对STM32中FDCAN的使用做个示例。CAN的一些基础介绍与使用可以参考下面文章:《CAN基础概念》https://blog.csdn.net/Naisu_kun/articl

贸易战的影响:跨境电商的“黑洞”风险与机遇

当今全球贸易局势充满了不确定性和动荡。贸易战的阴云笼罩下,跨境电商企业面临着前所未有的挑战,但与此同时,也蕴藏着巨大的机遇。本文将深入探讨贸易战对跨境电商的影响,以及企业在这个新现实中如何应对风险并寻找机遇。贸易战的背景贸易战是国家之间为争夺贸易利益而采取的一系列贸易政策和关税措施的冲突。近年来,中美之间的贸易战引起了

大模型股票交易-挖掘新闻和情绪价值

埃隆·马斯克(ElonMusk)的星际飞船于2023年4月20日升空后爆炸。想象一下,当时您正在观察股市,突然出现新闻,您会如何交易TSLA股票?我希望您不要与我争论,您作为交易者(而不是投资者)要做的第一件事就是摆脱现有的多头头寸并可能做空股票。让我们看看这样的交易是否有利可图。根据此链接SpaceXrocketla

飞驰的高铁-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第150讲。飞驰的高铁,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第2题,题目要求编程实现模拟高铁飞驰前进的效果。当按下数字1时,画面中的景

游戏创业小知识:游戏运营的步骤和流程

游戏运营是确保游戏在持续运行中保持活跃和成功的过程。以下是游戏运营的一般步骤流程:1.游戏发布前准备游戏选择:了解并熟悉游戏的核心概念、目标受众和游戏玩法。开发团队:组建开发团队,包括程序员、设计师、艺术家和声音设计师等。技术基础设施:建立游戏服务器、数据库和其他必要的技术基础设施。资金筹集:获取足够的资金来支持游戏的

原生微信小程序中进行 API 请求

原生微信小程序中进行API请求当在原生微信小程序中进行API请求时,封装请求可以提高代码的可维护性和可扩展性。在本篇博客中,我们将一步步介绍如何进一步封装请求,并添加请求超时、拦截器和请求取消功能。第一步:基本请求封装首先,我们创建一个用于发送HTTP请求的基本封装。在微信小程序中,我们使用wx.request发送请求

day41 jdk8新特性Stream流 数据库安装

流(Stream)中保存了对集合或者数组数据的操作,和集合类似,但是集合中保存的是数据。Stream不能保存数据一、创建流通过Collection对象的stream()或者parallelStream()通过Arrays类的stream(Array[]<T>)方法通过Stream接口of()iterate()gener

Java版本spring cloud + spring boot企业电子招投标系统源代码

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

热文推荐