likes
comments
collection
share

Git pre-push 检查“当前分支”是否落后于“main”

作者站长头像
站长
· 阅读数 67
  1. 背景

在开发新需求的时候,我们会基于 main 分支 checkout 出来 feature 分支,但是这个过程中可能有同学已经 merge 了新的代码。

那么问题来了,有些时候由于自己的疏忽或者任务紧急,可能上一次开发完,上线前的代码可能落后于 main 分支,如果后期不发现,那么上线的应用就不是完整代码的应用。

怎么解决呢?我们要及时 rebase main 的最新代码,保证代码不会落后。这个时候就可以借助 git 命令实现自动化检查,当不符合要求时,代码会被禁止 push 到远程仓库。

  1. 安装本钩子,防止没有及时合并 main 代码

  1. 修改 package.json

{

    "husky": {

      "hooks": {

        "pre-commit": "lint-staged",

    +++ "pre-push": "bash git_pre_push.sh",

        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"

      }

    },

}
  1. 写入钩子文件

 #!/bin/bash



git-log-flat-colored() {

 git --no-pager log --format="%C(yellow)%h%Creset %C(cyan)%cd%Creset %s %Cgreen%an%Creset" --date=short "$@"

}



CURRENT_FEATURE= $(git symbolic-ref --short -q HEAD )

CURRENT_PATH= $(git rev-parse --show-toplevel )

REFERENCE_BRANCH="origin/main"



echo -e "\033[0;34m >>----- 当前核查仓库路径 $ {CURRENT_PATH} -----<< \033[0m"



 # 检查 “origin/main” 分支是否存在,如果存在,更新远端记录并比较是否存在落后提交

git rev-parse --verify $ {REFERENCE_BRANCH} > /dev/null 2>&1

if [ "$?" == "0" ]; then



 git fetch origin



   NB_COMMITS_BEHIND= $(git rev-list --left-right --count $ {REFERENCE_BRANCH}...@ | cut -f1 )



 if [ " $ {NB_COMMITS_BEHIND}" -gt "0" ]; then

 echo -e "\033[0;31m >>----- $ {CURRENT_FEATURE} -----<< 当前分支有 $ {NB_COMMITS_BEHIND} 个提交落后于 " $ {REFERENCE_BRANCH}", 请合并最新的 main 分支代码\n \033[0m"

     git-log-flat-colored $ {REFERENCE_BRANCH} | head -" $ {NB_COMMITS_BEHIND}"

     exit 2

   else

 echo -e "\033[0;32m >>----- $ {CURRENT_FEATURE} -----<<当前分支包含 $ {REFERENCE_BRANCH} 分支上的所有提交记录 \033[0m"

   fi

 else

 echo -e "\033[0;31m >>----- 不能比较,检测 $ {REFERENCE_BRANCH} 不存在 -----<< \033[0m"

   exit 2

fi
  1. 举个 🌰

  • 当前分支包含 main 分支所有提交记录:feature-0514-success-cxl

Git pre-push 检查“当前分支”是否落后于“main”

  • 当前分支落后于 main 分支:feature-0514-fail-cxl

Git pre-push 检查“当前分支”是否落后于“main”

转载自:https://juejin.cn/post/7209919510723559485
评论
请登录