我有一個裸露的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