3 回答

TA貢獻1946條經驗 獲得超4個贊
假設您的分支master在這里和遠程都被調用,并且您的遠程被調用origin,則可以執行以下操作:
git reset --hard <commit-hash>
git push -f origin master
但是,如果其他任何人正在使用遠程存儲庫并撤消更改,則應避免這樣做。在這種情況下,最好還原不需要的提交,然后按正常方式推送。
更新:您已經在下面說明其他人撤消了您已推送的更改,因此最好創建一個新的提交以還原所有這些更改。在JakubNar?bski的回答中,您對執行此操作的選擇有很好的解釋。哪一個最方便取決于您要還原的提交數量,以及哪種方法對您最有意義。
由于從您的問題中可以很明顯地看出您已經習慣git reset --hard了重置master分支,因此您可能首先需要使用git reset --hard ORIG_HEAD來將分支移回到之前的位置。(與往常一樣git reset --hard,請確保它git status是干凈的,您位于正確的分支上,并且知道git reflog作為恢復顯然丟失的提交的工具。)您還應該使用來檢查ORIG_HEAD指向正確的提交的位置git show ORIG_HEAD。
故障排除:
如果收到類似“ ![遠程拒絕] a60f7d85-> master(預接收掛鉤被拒絕) ”的消息
那么您必須允許為特定分支重寫分支歷史記錄。例如在BitBucket中,它說“不允許重寫分支歷史記錄”。有一個Allow rewriting branch history必須選中的復選框。

TA貢獻1921條經驗 獲得超9個贊
如果您不介意丟失本地更改,請使用其他答案。如果您選擇了錯誤的提交哈希值,該方法仍然會破壞您的遙控器。
如果只想使遠程匹配成為本地分支中已經存在的提交,則:
千萬不能做任何復位。
使用git log找到你想要的遙遠,在提交。git log -p查看更改或git log --graph --all --oneline --decorate查看緊湊的樹。(將最后一個作為git別名非常方便。)
復制提交的哈希值或其標記,或者復制提示的分支名稱。
運行如下命令:
git push --force <remote> <commit-ish>:<the remote branch>
例如
git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
要么
git push --force staging v2.4.0b2:releases
- 3 回答
- 0 關注
- 569 瀏覽
添加回答
舉報