Git:拒绝通过推送删除远程分支(如 receive.denyDeletes),但前提是分支未完全 merge

标签 git merge branch push branching-and-merging

Git 默认拒绝删除本地分支(通过 git branch -d mybranch),如果该分支没有完全 merge 。

但是,如果我通过 git push origin --delete mybranch 删除远程分支,如果分支没有完全 merge ,则不会有任何警告。

这似乎相当危险:自从我上次获取分支以来,其他人可能已经将更新推送到该分支,因此与本地分支相比,远程分支意外删除未 merge 分支的可能性更大。

那么,如果我删除远程未 merge 的分支,为什么 git 不发出警告?有没有办法让它警告或拒绝删除?

注意:我意识到理想情况下我应该在删除分支之前git pull 分支,并确保它完全 merge 。然而,每个人都会犯错,我希望有一个安全网。

最佳答案

However, if I delete a remote branch via git push origin --delete mybranch, there is no warning whatsoever if the branch is not fully merged.

我的回答是“与什么 merge ?” Remote 的 HEADmaster 分支?还有别的吗? Git 引用匹配或多或少是可无限配置的。您可以配置多个 Remote 。上游跟踪分支机构不需要与其本地分支机构同名。如果您知道如何操作,您甚至可以配置多个 上游跟踪分支(这称为“ Octopus ” pull ,并且没有允许您执行此操作的瓷器命令)。

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

根据 kan 在下面的评论,人们可能还会检查删除远程分支是否会生成悬空提交(因此更强大的 git branch -d)。我也不相信有任何这种类型的保护,并且在具有数十个或数百个分支机构的远程验证可能不是一件容易的事情。

您能做的最好的事情就是使用 receive.denyDeletes 完全防止删除。

关于Git:拒绝通过推送删除远程分支(如 receive.denyDeletes),但前提是分支未完全 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12321277/

相关文章:

git - 按最后修改日期的顺序列出文件

python - 合并两个双端队列的最快方法

tfs - 文件夹转换为分支?

git - 卡住 Git 分支

git - 我如何使用 Git 检查我的 Origin 上的一个分支?

Git 标记消息模板?

git - 通过远程机器连接到 github 的 ssh key 问题

javascript - SAP UI5 : Merge/join two tables

svn - 如何SVN合并两个分支,其中相同的文件夹添加到两个分支

git:切换分支并忽略任何更改而不提交