如果该分支未完全合并,Git将默认拒绝删除本地分支(通过git branch -d mybranch
)。
但是,如果我通过git push origin --delete mybranch
删除远程分支,则如果分支未完全合并,则不会发出任何警告。
这似乎相当危险:自从我上次获取分支以来,其他人可能已将更新推送到分支,因此意外删除未合并分支似乎更可能是远程分支而不是本地分支。
那么为什么git不警告我是否删除了一个远程未合并分支?有没有办法让它警告或否认删除?
注意:我意识到理想情况下我应该在删除它之前git pull
分支,并确保它完全合并。但是,每个人都会犯错误,我希望有一个安全网。
答案 0 :(得分:5)
但是,如果我通过git push origin删除远程分支--delete mybranch,如果分支未完全合并,则不会发出任何警告。
我的回答是“与什么结合?”遥控器的HEAD
? master
分支?别的什么? Git ref匹配或多或少是无限可配置的。您可以配置多个遥控器。上游跟踪分支不需要与其本地对应分支具有相同的名称。你甚至可以配置多个上游跟踪分支,如果你知道如何(它被称为“章鱼”拉动,并且没有瓷器命令可以让你这样做。)
git branch -d
检查分支是否已与其上游分支(远程存储库中不存在的东西)合并,然后,如果不存在上游,则HEAD
。远程存储库的对应检查不是那么明显。
Per kan的评论,下面,人们还可以检查删除远程分支是否生成了悬空提交(因此更强大的git branch -d
)。我不相信这种类型有任何保护,并且在具有数十个或数百个分支的遥控器中进行验证可能并不容易。
您可以做的最好的事情是使用receive.denyDeletes
完全阻止删除。
答案 1 :(得分:0)
Christopher的answer(upvoted)说明了本地(下游)回购和远程(上游)回购之间的区别。
请参阅“Definition of “downstream” and “upstream””
上游回购对任何下游回购都不了解,比如您当地的回购 它(上游回购)可以代表任何东西(许多人使用的远程仓库,或者仅用于编译和测试的临时仓库)。 要求远程仓库删除分支不应该受到任何本地仓库特征的约束(如果是这样,你需要做的就是让另一个本地仓库尊重你想要强制执行的任何约束:它可以删除远程分支,即使您的第一个本地仓库仍然处于不正确的状态。)
但是,删除本地回购中的本地分支可以与您要关注的本地政策相关联。