这是我上一个问题的后续跟进:
问题是为什么在强制推送之后,历史记录在其他开发人员存储库中不同步。答案是,执行git pull
后,其他开发人员将其本地历史记录与服务器中的历史记录合并。因此,如果我从顶部删除了一个提交并强制推送它,那么它仍将位于其他开发人员存储库的顶部。
现在到了这一点,今天我再一次测试了这个场景(这次是与公司的git服务器 - 它使用了gerrit)。我看到上述历史合并不会发生。
我做了什么:
我有一个中央存储库,我已将其克隆到两个本地文件夹中。我已经创建了一个用于测试的远程分支,然后推送到它几个提交。它们的日志如下所示:
git log --preety=oneline
962937062641327e4ad9d83ee7ead97f6c5a3bc7 One test change
08667125120a39b24c2006d5a63f6e1be61828a4 Code fixes - extra comment
...
然后确保两个本地存储库都已同步。
然后在本地的reposotory,lests说repo1,我删除了顶级提交:
git reset --hard 086671251
并使用git push -f origin HEAD:dev/mike-test3
然后在第二个本地报告中,我执行了git pull
,现在让我感到困惑的是提交962937062实际上已被删除,下面是git在输出时给出的:
git pull
remote: Counting objects: 10, done
remote: Finding sources: 100% (6/6)
Unpacking objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
From [...........]
+ 9629370...0866712 dev/mike-test3 -> origin/dev/mike-test3 (forced update)
18ab880..bc08478 master -> origin/master
First, rewinding head to replay your work on top of it...
即使git status
显示我没有待推送的待处理提交。
我从前一个问题中略微改变了一个推荐。从git reset HEAD^ --hard
到git reset --hard SHA1
,前一个对我来说不起作用(不应该是HEAD~1?)。