Git:拒绝通过push删除远程分支(如receive.denyDeletes),但仅当分支未完全合并时

sle*_*ske 6 git merge branch push branching-and-merging

git branch -d mybranch如果该分支未完全合并,Git将默认拒绝删除本地分支(via ).

但是,如果我删除了远程分支git push origin --delete mybranch,则如果分支未完全合并,则不会发出任何警告.

这看起来相当危险:自从我上次获取分支以来,其他人可能已将更新推送到分支,因此意外删除未合并分支似乎更可能是远程分支而不是本地分支.

那么为什么git不会警告我是否删除了一个远程未合并分支?有没有办法让它警告或否认删除?

注意:我意识到理想情况下我应该git pull删除它之前的分支,并确保它完全合并.但是,每个人都会犯错误,我希望有一个安全网.

Chr*_*her 5

但是,如果我通过git push origin删除远程分支--delete mybranch,如果分支未完全合并,则不会发出任何警告.

我的回答是"与什么结合?" 遥控器HEAD?该master分支?别的什么?Git ref匹配或多或少是无限可配置的.您可以配置多个遥控器.上游跟踪分支不需要与其本地对应分支具有相同的名称.你甚至可以配置多个上游跟踪分支,如果你知道如何(它被称为"章鱼"拉,并且没有瓷器命令可以让你这样做).

git branch -d检查分支是否与其上游分支(远程存储库中不存在的东西)合并,然后,如果没有上游存在,HEAD.远程存储库的对应检查不是那么明显.

在下面的每个评论中,还可以检查删除远程分支是否生成了悬空提交(因此更强大git branch -d).我也不相信这种类型有任何保护,并且在具有数十个或数百个分支的远程中进行验证可能并不容易.

您可以做的最好的事情就是完全防止删除receive.denyDeletes.