強烈推薦的做法是不要改變別人推遲推送的提交歷史。儘管如此,不明白這一點的人無論如何也不可避免地會這樣做。從「其他用戶」的角度看,不是自己改變歷史的人,從這個方面恢復的最好方法是什麼?Git:如何從已更改的歷史中恢復?
下面是一個具體的例子。
瑞安創建一些提交和推動:
ryan $ git init
ryan $ echo "initial stuff" > file.txt
ryan $ git add file.txt
ryan $ git commit -m "Initial commit"
ryan $ echo "more stuff" >> file.txt
ryan $ git add file.txt
ryan $ git commit -m "More stuff"
ryan $ git remote add origin [some url]
ryan $ git push origin
喬克隆GitHub的回購
joe $ git clone [some url]
在這一點上,一切都很好,那麼......
Ryan更改最後一次提交:
ryan $ vi file.txt
ryan $ git add file.txt
ryan $ git commit --amend -m "More stuff"
ryan $ git push origin
[Fails]
ryan $ git push -f origin master
請注意,Ryan在失敗後做了強制推送,否則就會失敗。如果他是唯一一個從起源中拉出來的話,那就沒有問題了,但在這種情況下,他只是搞砸了Joe。
喬試圖拉:
joe $ git pull origin
[Conflict!]
現在,這是一個很簡單的例子,但它很可能是喬不熟悉file.txt
並即將很難合併的變化。
我再次明白,問題的根源在於瑞安做了一件壞事。但是,儘管如此,我正在尋找喬和他的隊友可以從中恢復而不必進行合併提交的方式。
我知道一個技巧就是刪除遠程分支的本地副本,然後從原點重新檢查它。但是,當然這隻有在你沒有變化的情況下才有效。喬很可能會對自己想要做的一些新的改變。
想法?
如何拒絕強制推送,至少對於像master這樣的分支? –
@FrankOsterfeld不是一個壞主意,我沒有想到這一點。 – Marplesoft