如果分支不存在,如何删除没有错误消息的分支?

时间:2014-03-13 10:18:55

标签: git branch

我想在脚本中包含一个删除本地Git分支的命令,如果分支不存在,我不希望显示任何错误消息。与此同时,我也不想要一个状态代码来指示Git命令的失败。

给出以下示例:

git branch -D foo

如果分支存在,则删除它,命令的返回状态为0,表示成功。如果我再次运行相同的脚本,分支不再存在,因此命令失败,打印

error: branch 'foo' not found.

并且Git命令的返回状态为> 0,表示错误。

有没有办法沉默命令,所以它不关心分支是否在那里?理想情况下,它不会打印错误消息,也不会通过非零返回状态指示失败。

我知道我可以使用一些脚本魔术解决这些问题,但我更喜欢一个简单的解决方案,因为我必须在Windows上执行相同的操作( .bat )和Unix / Linux / Mac( .sh )。

我错过了一个选项,还是我运气不好?

2 个答案:

答案 0 :(得分:3)

试试这个:

branch="${1:?foo}"  

if git show-ref --verify --quiet "refs/heads/$branch"; then
echo "Branch exists."
.......

答案 1 :(得分:2)

  

如果分支存在,它将被删除,并且返回状态..是0,...有没有办法使命令静音,因此它不关心分支是否存在...它不会打印错误消息,它也不会通过非零返回状态指示失败。

以下示例将禁止所有输出,并通过退出代码指示成功或失败:

Linux   $ git branch -D <branch> &>/dev/null    
Windows $ git branch -D <branch> 1>nul 2>nul

如果您打算有意识地忽略退出代码,只需不要检查它,然后继续执行脚本中的下一个命令。