我有一个用于强制推动当前分支的 git 别名:
[alias]
fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
它基本上映射fp
到一个命令,该命令对当前分支执行强制推送,并从中提取git rev-parse
。
问题:有时我不注意,但git fp
在 master 分支上时却注意了。如果存储库中没有分支保护规则,这显然会很糟糕。
我想防止自己将来犯这个错误。我如何更新我的别名命令来做同样的事情,除非只有当分支名称不是时才这样做master
?
答案1
你可以像在常规 bash 中一样使用条件:
[alias]
fp = "!branch=$(git branch --show-current); [[ -z $branch || $branch = 'master' ]] && echo 'Command cannot be used on master branch or when not on branch.' || git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
这首先将分支名称保存git branch --show-current
到 var,然后将其与 进行比较master
,如果匹配则发出警告,否则执行您的命令。
在某些情况下,当在分支之外时,版本可能会更可靠一些:
[alias]
fp = "!branch=$(git rev-parse --abbrev-ref HEAD); [ \"$branch\" = 'master' ] && echo 'Command cannot be used on master branch' || git push -f origin \"$branch\""
但您可能也不想尝试推动。
!f() { }
请注意,这些命令在旧版 git 中可能不起作用,并且需要更复杂的格式(例如语法),这里假设是最新的版本( 2.40
)。