我和我的一位同事正在开发一个git master分支,它具有以下提交历史记录
A - > B - > C - > D - > E - > F - > HEAD
现在,我的同事在提交#“C”检查了主分支,并开始制作并提交本地更改。与此同时,我将主分支向前移动,提交“D”和“E”。
后来,我的同事通过提交“F”推送他的更改,而没有执行拉动,这个提交基本上改变了我在提交“D”和“E”中的更改。这是预期的吗?为什么没有git抱怨他的工作空间滞后,他应该在推动他的更改之前将它同步到HEAD?
答案 0 :(得分:2)
这听起来像是你的同事推动了分支机构,如果他们不在他当地的分支机构中,它会丢弃你所做的承诺。当你试图推送并且你的分支不包含远程端的所有提交时,Git通常会抱怨。我唯一一次静默地看到Git更新是将存储库设置为镜像。
我不喜欢删除强制推送的能力,因为有些情况下这是正确的事情。如果您确实要禁用它们,可以通过在服务器端存储库中设置receive.denyNonFastForwards
来实现。您可能也想设置receive.denyDeletes
,否则有人可以删除主参考,然后安装新参考。
您可以使用pre-receive hook来验证主人没有倒带。来自Git贡献区的update-paranoid能够做到这一点,以及其他一些漂亮的功能。