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

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 &>/dev/null || true”。这将在 git 返回错误时执行“true”,有效地将整个语句转换为在所有情况下成功执行。【参考方案3】:

对于Windows powershell,以下命令将删除除当前分支之外的所有本地分支

git branch | % $_.Trim()  | ? $_ -notmatch '\*'  | % git branch -D $_ 

【讨论】:

以上是关于如果分支不存在,如何删除没有错误消息的分支?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除或替换 github 中的 master 分支?

合并到 master 后,如何检查来自哪个分支的哪些提交以及从何处删除的合并?

如何删除除master之外的所有本地分支并在一个没有别名的命令中开发?

切换分支时Git不删除文件

如何修剪远程不再存在的本地跟踪分支

如何删除所有已合并的 Git 分支?