【发布时间】:2020-08-10 06:08:32
【问题描述】:
所以我知道,当您执行git push 时,git 会尝试将本地分支的更改集成到相应的远程分支。但是,如果分支已经分叉,git 将不允许你推送,说
提示:更新被拒绝,因为远程包含您在本地没有的工作。
当用户推送成功时,他期望他刚刚推送的远程分支镜像他自己的。如果我们在推送时允许 3 路合并(仅在没有冲突的情况下),那么远程分支显然不会匹配他自己的,因为它具有我们本地副本不知道的提交,以及合并提交。但是,如果它需要 3 路合并,git 不能在推送后进行拉取吗?以这种方式推送时允许 3 路合并有什么缺点,为什么 Git 的创建者决定只允许快进提交?
下图说明情况:https://imgur.com/a/800v5Eq
【问题讨论】:
-
因为绝对不能保证可以以安全和明智的方式解决问题,而且可能还有其他人在跟踪同一个遥控器。这取决于你将本地副本变为兼容状态,因为你有context。
-
你只是想打破 git 的分布式特性。事情发生在回购......你的回购。你说的是在不同的 repo 上进行操作。
-
@jonrsharpe 如果我们限制没有冲突的推送的 3 路合并怎么办?在这种情况下,合并应该是一个安全操作,无需重写历史记录,即使其他人正在跟踪该远程分支,他们也可以通过
git pull获取最新更新。 -
@eftshift0 你能否提供一个更具体的“打破 git 的分布式特性”的例子?这种方法在什么情况下会失效?
-
那有什么意义呢?既然如此微不足道就能解决,那你为什么不这样做呢? FWIW 我们很少合并,主要是
pull -r以保持线性历史。
标签: git github system conceptual