我和我的一位同事正在开发一个 git master 分支,该分支的提交历史如下
A -> B -> C -> D -> E -> F -> 头部
现在我的同事在提交 #"C" 处检查了 master 分支,并开始着手进行和提交本地更改。同时,我通过提交“D”和“E”将主分支向前移动。
后来我的同事通过提交“F”推送了他的更改而没有进行拉取,这个提交基本上取消了我在提交“D”和“E”中的更改。这是预期的吗?为什么 git 没有抱怨他的工作空间滞后,他应该在推送他的更改之前将其同步到 HEAD ?
我和我的一位同事正在开发一个 git master 分支,该分支的提交历史如下
A -> B -> C -> D -> E -> F -> 头部
现在我的同事在提交 #"C" 处检查了 master 分支,并开始着手进行和提交本地更改。同时,我通过提交“D”和“E”将主分支向前移动。
后来我的同事通过提交“F”推送了他的更改而没有进行拉取,这个提交基本上取消了我在提交“D”和“E”中的更改。这是预期的吗?为什么 git 没有抱怨他的工作空间滞后,他应该在推送他的更改之前将其同步到 HEAD ?
听起来你的同事强制推动了分支,如果它们不在他的本地分支中,它将丢弃你所做的提交。当您尝试推送并且您的分支不包含远程端的所有提交时,Git 通常会抱怨。我唯一一次看到 Git 无声更新是在将存储库设置为镜像时。
我不喜欢删除强制推送的能力,因为在某些情况下这是正确的做法。如果您确实想禁用它们,可以通过receive.denyNonFastForwards在服务器端存储库中进行设置来实现。您可能也想设置receive.denyDeletes,否则有人可以删除主 ref,然后安装一个新的。
您可以使用pre-receive 钩子来验证 master 没有被倒带。 Git 贡献区域的update-paranoid能够做到这一点,以及其他一些漂亮的功能。