0

我和我的一位同事正在开发一个 git master 分支,该分支的提交历史如下

A -> B -> C -> D -> E -> F -> 头部

现在我的同事在提交 #"C" 处检查了 master 分支,并开始着手进行和提交本地更改。同时,我通过提交“D”和“E”将主分支向前移动。

后来我的同事通过提交“F”推送了他的更改而没有进行拉取,这个提交基本上取消了我在提交“D”和“E”中的更改。这是预期的吗?为什么 git 没有抱怨他的工作空间滞后,他应该在推送他的更改之前将其同步到 HEAD ?

4

1 回答 1

2

听起来你的同事强制推动了分支,如果它们不在他的本地分支中,它将丢弃你所做的提交。当您尝试推送并且您的分支不包含远程端的所有提交时,Git 通常会抱怨。我唯一一次看到 Git 无声更新是在将存储库设置为镜像时。

我不喜欢删除强制推送的能力,因为在某些情况下这是正确的做法。如果您确实想禁用它们,可以通过receive.denyNonFastForwards在服务器端存储库中进行设置来实现。您可能也想设置receive.denyDeletes,否则有人可以删除主 ref,然后安装一个新的。

您可以使用pre-receive 钩子来验证 master 没有被倒带。 Git 贡献区域的update-paranoid能够做到这一点,以及其他一些漂亮的功能。

于 2013-06-25T10:13:29.180 回答