Supponendo che il tuo ramo sia chiamato master
sia qui che da remoto, e che il tuo telecomando sia chiamato origin
potresti fare:
git reset --hard <commit-hash>
git push -f origin master
Tuttavia, dovresti evitare di farlo se qualcun altro sta lavorando con il tuo repository remoto e ha apportato le modifiche. In tal caso, sarebbe meglio ripristinare le commit non desiderate, quindi spingere normalmente.
Aggiornamento: di seguito hai spiegato che altre persone hanno apportato le modifiche che hai inviato, quindi è meglio creare un nuovo commit che ripristini tutte quelle modifiche . C'è una bella spiegazione delle tue opzioni per farlo in questa risposta di Jakub Narębski . Quale è il più conveniente dipende da quanti commit vuoi ripristinare e quale metodo ha più senso per te.
Dal momento che dalla tua domanda è chiaro che hai già usato git reset --hard
per ripristinare il tuo master
ramo, potresti dover iniziare usando git reset --hard ORIG_HEAD
per spostare il tuo ramo dove era prima. (Come sempre git reset --hard
, assicurati che git status
sia pulito, di essere sul ramo giusto e di essere a conoscenza git reflog
come uno strumento per recuperare i commit apparentemente persi.) Dovresti anche controllare che ORIG_HEAD
punti al commit giusto, con git show ORIG_HEAD
.
Risoluzione dei problemi:
Se viene visualizzato un messaggio del tipo " ! [Telecomando rifiutato] a60f7d85 -> master (hook di pre-ricezione rifiutato) "
quindi è necessario consentire la riscrittura della cronologia del ramo per il ramo specifico. In BitBucket, ad esempio, diceva "Non è consentita la riscrittura della cronologia dei rami". C'è una casella di controllo Allow rewriting branch history
che devi selezionare.
origin/master
non essere stato attirato e spinto da altri utenti? La modifica della cronologia di un repository pubblico (ovvero non locale) è qualcosa che si desidera evitare in ogni momento.