如何在Husky的pre-push钩子中获取当前分支名并执行强制推送到sandbox远程分支?
解决Husky pre-push钩子强制推送当前分支到远程sandbox分支的问题
刚好我之前也遇到过类似需求,这事儿其实没那么复杂,核心就是用shell命令替换把当前分支名嵌入到推送命令里,再结合Husky的钩子配置就行。下面一步步给你讲清楚:
1. 构造正确的推送命令
你已经知道用git branch --show-current获取当前分支名,在shell脚本里,我们可以用$(命令)的语法把命令的输出直接作为变量值。所以完整的推送命令应该是:
git push origin --force $(git branch --show-current):sandbox
如果你的分支名比较特殊(比如包含空格,虽然非常不推荐这么命名),可以给变量加双引号避免解析出错:
git push origin --force "$(git branch --show-current)":sandbox
2. 配置Husky的pre-push钩子
假设你用的是Husky v7及以上版本(现在主流项目都是这个版本),按以下步骤操作:
- 先确保Husky已经初始化完成(如果还没配置,先运行
npx husky install,再执行npm set-script prepare "husky install"把Husky加入项目生命周期) - 快速创建pre-push钩子:
npx husky add .husky/pre-push "bash -c 'git push origin --force $(git branch --show-current):sandbox'" - 或者手动编辑
.husky/pre-push文件,写入下面的内容:#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # 执行强制推送逻辑 git push origin --force $(git branch --show-current):sandbox - 最后别忘了给钩子文件添加执行权限(部分系统需要这一步):
chmod +x .husky/pre-push
3. 测试验证
现在你切换到任意分支,执行git push,Husky就会自动触发pre-push钩子,把当前分支强制推送到远程的sandbox分支了。
⚠️ 提醒一下:--force强制推送要谨慎使用,确保你清楚这个操作的后果,避免覆盖远程分支上其他人的未同步工作!
内容的提问来源于stack exchange,提问作者systemdebt
相关产品推荐
相关产品推荐

