我有一个裸露的git存储库B,从中我已经克隆了两个存储库C和D.然后我添加了一些更改为C的内容,后来被推送到B,最后被D拉出。是同步的。强制推送后修复历史记录
现在我想最后删除推由C犯,所以我下面的:
$ git reset HEAD^ --hard
$ git push -f
(从http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html)
和DI做:
$ git pull
和我得到的输出如下:
[[email protected] git1]$ git pull
From /home/mkm/projects/git_tests/git1
+ a5d681f...c481973 master -> origin/master (forced update)
Already up-to-date.
和git log
给了我与以前完全相同的输出。我想D上的历史与C上的历史相同。我从What and where does one potentially lose stuff when git says "forced update"?知道最后的git pull
将我的历史记录与服务器上已更改的历史记录合并在一起,但实际上会发生什么?我希望历史在任何地方都能保持同步。
我知道我可以做git恢复提交,这是在这样的场景中推荐的aproach,但我想了解为什么在强制推送的情况下,历史将不会保持同步。
我不认为在这种情况下恢复提交,即使*有意义*,因为你已经正式覆盖(并丢失)从C的角度提交。 – Makoto
你不想做'git pull'因为它会合并您的本地更改。由于您只删除了最后一次提交并且在本地仍然有提交,这只是一个提升。所以'git pull'是你不“看到”这个变化的原因。 'git fetch'和'git reset --hard'更好地反映了这一点。保管和备份,因为这是版本控制,而不是备份。 – hakre
@Makoto通过使用git-revert我的意思是完全取代'git reset HEAD^--hard; git push -f'。 – mike