Git:只有在没有警告的情况下才删除分支

ram*_*esh 0 git

我使用以下命令删除已合并到HEAD.

>>> git branch | xargs git branch -d 
>>> # (not -D) because I don't wanted to forced delete all the branches
Run Code Online (Sandbox Code Playgroud)

但是我注意到它还删除了一个没有合并到HEAD但被推送到远程的分支。

错误警告:(分支未被删除)

warning: not deleting branch 'ER-1421' that is not yet merged to
         'refs/remotes/origin/ER-1421', even though it is merged to HEAD.
error: The branch 'ER-1421' is not fully merged.
Run Code Online (Sandbox Code Playgroud)

警告无错误:(已从本地删除)

warning: deleting branch 'ER-2256' that has been merged to
         'refs/remotes/origin/ER-2256', but not yet merged to HEAD.
Deleted branch ER-2256 (was d18dafcee).
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何限制删除会发出任何警告或未合并到的分支HEAD

更新:基于@Saurav 评论。我尝试使用以下命令

>>>git branch --merged | tr '\n' ' ' | xargs git branch -d

warning: not deleting branch 'ER-1421' that is not yet merged to
         'refs/remotes/origin/ER-1421', even though it is merged to HEAD.
error: The branch 'ER-1421' is not fully merged.
If you are sure you want to delete it, run 'git branch -D ER-1421'.
error: branch '*' not found.
error: Cannot delete branch 'master' checked out at '/media/sf_workspace/personify'
warning: not deleting branch 'release-66' that is not yet merged to
         'refs/remotes/origin/release-66', even though it is merged to HEAD.
error: The branch 'release-66' is not fully merged.
If you are sure you want to delete it, run 'git branch -D release-66'.
Run Code Online (Sandbox Code Playgroud)

Sau*_*mar 5

如果您只想删除合并到 HEAD 的本地分支,那么我宁愿建议只选择那些完全合并到 HEAD 的分支进行删除。对您的命令稍作修改即可解决此问题:

git branch --merged | xargs git branch -d 
Run Code Online (Sandbox Code Playgroud)

git branch --merged只列出那些完全合并的分支。然后休息你可以删除xargs git branch -d。还要确保从 HEAD 指向的分支(可能是master分支)运行此命令。

希望能帮助到你!