如果不是主分支,则强制将当前分支推送到原点

如果不是主分支,则强制将当前分支推送到原点

我有一个用于强制推动当前分支的 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)。

相关内容