如果该本地分支没有完全 merge ,默认情况下,Git将拒绝删除该本地分支(通过git branch -d mybranch
)。
但是,如果我通过git push origin --delete mybranch
删除远程分支,则如果该分支未完全 merge ,则不会发出任何警告。
这似乎很危险:自从我上次获取更新以来,其他人可能已将更新推送到该分支,因此与本地分支相比,对于远程分支,意外删除未 merge 的分支似乎更有可能。
那么,如果删除远程未 merge 的分支,为什么git不会发出警告?有没有办法使它警告或拒绝删除?
注意:我认识到理想情况下,我应该在删除分支之前git pull
分支,并确保它已完全 merge 。但是,每个人都会犯错,我想拥有一个安全网。
最佳答案
我的回答将是“与什么 merge ?” Remote 的HEAD
? master
分支?还有别的吗Git ref匹配或多或少是无限可配置的。您可以配置多个 Remote 。上游跟踪分支不需要与本地分支具有相同的名称。如果知道如何,您甚至可以配置多个上游跟踪分支(这被称为“ Octopus ” pull ,并且没有瓷器命令允许您执行此操作)。git branch -d
检查分支是否尚未与其上游分支 merge (远程存储库中不存在),然后(如果上游不存在)HEAD
。远程存储库的对应检查几乎不那么明显。
根据kan的评论,以下内容可能还会检查是否删除了远程分支生成的悬空提交(因此功能更强大git branch -d
)。我也不相信这种类型的保护,在具有数十个或数百个分支的远程环境中进行验证可能也不是一件容易的事。
您可能能够做的最好的事情就是完全避免使用receive.denyDeletes
进行删除。