3 回答
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
假設(shè)您的分支master在這里和遠(yuǎn)程都被調(diào)用,并且您的遠(yuǎn)程被調(diào)用origin,則可以執(zhí)行以下操作:
git reset --hard <commit-hash>
git push -f origin master
但是,如果其他任何人正在使用遠(yuǎn)程存儲(chǔ)庫(kù)并撤消更改,則應(yīng)避免這樣做。在這種情況下,最好還原不需要的提交,然后按正常方式推送。
更新:您已經(jīng)在下面說(shuō)明其他人撤消了您已推送的更改,因此最好創(chuàng)建一個(gè)新的提交以還原所有這些更改。在JakubNar?bski的回答中,您對(duì)執(zhí)行此操作的選擇有很好的解釋。哪一個(gè)最方便取決于您要還原的提交數(shù)量,以及哪種方法對(duì)您最有意義。
由于從您的問(wèn)題中可以很明顯地看出您已經(jīng)習(xí)慣git reset --hard了重置master分支,因此您可能首先需要使用git reset --hard ORIG_HEAD來(lái)將分支移回到之前的位置。(與往常一樣git reset --hard,請(qǐng)確保它git status是干凈的,您位于正確的分支上,并且知道git reflog作為恢復(fù)顯然丟失的提交的工具。)您還應(yīng)該使用來(lái)檢查ORIG_HEAD指向正確的提交的位置git show ORIG_HEAD。
故障排除:
如果收到類(lèi)似“ ![遠(yuǎn)程拒絕] a60f7d85-> master(預(yù)接收掛鉤被拒絕) ”的消息
那么您必須允許為特定分支重寫(xiě)分支歷史記錄。例如在BitBucket中,它說(shuō)“不允許重寫(xiě)分支歷史記錄”。有一個(gè)Allow rewriting branch history必須選中的復(fù)選框。
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您不介意丟失本地更改,請(qǐng)使用其他答案。如果您選擇了錯(cuò)誤的提交哈希值,該方法仍然會(huì)破壞您的遙控器。
如果只想使遠(yuǎn)程匹配成為本地分支中已經(jīng)存在的提交,則:
千萬(wàn)不能做任何復(fù)位。
使用git log找到你想要的遙遠(yuǎn),在提交。git log -p查看更改或git log --graph --all --oneline --decorate查看緊湊的樹(shù)。(將最后一個(gè)作為git別名非常方便。)
復(fù)制提交的哈希值或其標(biāo)記,或者復(fù)制提示的分支名稱(chēng)。
運(yùn)行如下命令:
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 關(guān)注
- 589 瀏覽
添加回答
舉報(bào)
