如果分支不存在,如何删除没有错误消息的分支?
Posted
技术标签:
【中文标题】如果分支不存在,如何删除没有错误消息的分支?【英文标题】:How do I delete a branch without an error message if the branch does not exist? 【发布时间】:2014-04-17 23:58:41 【问题描述】:我想在脚本中包含一个删除本地 Git 分支的命令,如果该分支不存在,我不希望显示任何错误消息。同时,我也不希望 Git 命令出现指示失败的状态码。
举个例子:
git branch -D foo
如果分支存在则删除,命令返回状态为0,表示成功。如果我再次运行相同的脚本,分支不再存在,因此命令失败,打印
error: branch 'foo' not found.
且Git命令的返回状态为>0,表示错误。
有没有办法让命令静音,让它不关心分支是否存在?理想情况下,它不会打印错误消息,也不会通过非零返回状态指示失败。
我知道我可以使用一些脚本魔法来解决这些问题,但我更喜欢简单的解决方案,因为我必须在 Windows (.bat) 和 Unix/ Linux/Mac (.sh)。
我错过了一个选项,还是我运气不好?
【问题讨论】:
密切相关***.com/questions/14392349/… 【参考方案1】:试试这个:
branch="$1:?foo"
if git show-ref --verify --quiet "refs/heads/$branch"; then
echo "Branch exists."
.......
【讨论】:
好点 - 我可以使用 if 语句,但我也必须对 Windows 脚本执行相同的操作。我希望在“git branch”命令上错过一些开关。【参考方案2】:如果分支存在,则将其删除,返回状态..为0,...有没有办法使命令静音,使其不关心分支是否存在...不会打印一条错误消息,它也不会通过非零返回状态指示失败。
以下示例将抑制所有输出,并通过退出代码指示成功或失败:
Linux $ git branch -D <branch> &>/dev/null
Windows $ git branch -D <branch> 1>nul 2>nul
如果您打算有意识地忽略退出代码,请不要检查它,然后继续执行脚本中的下一个命令。
【讨论】:
请注意,如果您使用“-e”开关在 bash 或 sh(可能还有 ksh?)下运行脚本,因此“如果任何命令返回失败则存在”,脚本将终止。您可以防止它并处理这样的失败命令:“git branch -D对于Windows powershell,以下命令将删除除当前分支之外的所有本地分支
git branch | % $_.Trim() | ? $_ -notmatch '\*' | % git branch -D $_
【讨论】:
以上是关于如果分支不存在,如何删除没有错误消息的分支?的主要内容,如果未能解决你的问题,请参考以下文章
合并到 master 后,如何检查来自哪个分支的哪些提交以及从何处删除的合并?