Domanda

I " accidentalmente " ha inviato un commit a GitHub.

È possibile rimuovere questo commit?

Voglio ripristinare il mio repository GitHub com'era prima di questo commit.

È stato utile?

Soluzione

  

Nota: vedi alternativa a git rebase -i nei commenti qui sotto & # 8212;

     

git reset --soft HEAD^

Innanzitutto, rimuovi il commit dal tuo repository locale. Puoi farlo usando git rebase -i HEAD~2. Ad esempio, se è il tuo ultimo commit, puoi fare git push origin +branchName --force ed eliminare la seconda riga nella finestra dell'editor che si apre.

Quindi, forza il push su GitHub usando git stash

Vedi Git Magic Capitolo 5: Lessons of History - E Quindi alcuni per ulteriori informazioni (ad esempio se si desidera rimuovere i commit precedenti).

Oh, e se il tuo albero di lavoro è sporco, devi prima fare un git stash apply e poi un <=> dopo.

Altri suggerimenti

git push -f origin HEAD^:master

Questo dovrebbe " annullare " la spinta.

Per un facile ripristino se si tratta solo di un errore (forse hai biforcuto un repository, quindi hai finito per spingere verso l'originale anziché verso uno nuovo) ecco un'altra possibilità:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Ovviamente scambia quel numero con il numero del commit a cui vuoi tornare.

Tutto da allora verrà cancellato una volta premuto di nuovo. Per fare ciò, il prossimo passo sarebbe:

git push --force
  1. git log per scoprire il commit che desideri ripristinare

  2. git push origin +7f6d03:master mentre 7f6d03 è il commit prima del commit erroneamente spinto. + era per force push

E questo è tutto.

Qui è un'ottima guida che risolve il tuo problema, facile e semplice!

Nel caso in cui desideri mantenere le modifiche di commit dopo l'eliminazione:

Nota che questa soluzione funziona se il commit da rimuovere è l'ultimo impegnato.


1 - Copia il riferimento di commit a cui desideri tornare dal registro:

git log

2 - Reimposta git sul riferimento di commit:

 git reset <commit_ref>

3 - Blocca / archivia le modifiche locali dal commit errato da utilizzare in seguito dopo averle inviate al telecomando:

 git stash

4 - Invia le modifiche al repository remoto, (-f o --force):

git push -f

5 - Ripristina le modifiche memorizzate nel repository locale:

git stash apply

7 - Nel caso in cui siano presenti file non tracciati / nuovi nelle modifiche, è necessario aggiungerli a git prima di eseguire il commit:

git add .

6 - Aggiungi tutte le modifiche extra necessarie, quindi esegui il commit dei file necessari (o usa un punto '.' invece di indicare ogni nome di file, per eseguire il commit di tutti i file nel repository locale:

git commit -m "<new_commit_message>" <file1> <file2> ...

o

git commit -m "<new_commit_message>" .

Dovrai svuotare la cache per cancellarla completamente. questa pagina di aiuto di git ti aiuterà. (mi ha aiutato) http://help.github.com/remove-sensitive-data/

Usa git revert per ripristinare la tua spinta.

  

git-revert - Ripristina alcuni commit esistenti

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

Annulla le modifiche introdotte dalle patch correlate e registra alcuni nuovi commit che le registrano. Ciò richiede che l'albero di lavoro sia pulito (nessuna modifica dal commit HEAD).

1. git reset HEAD^ --hard
2. git push origin -f

Questo lavoro per me.

Per eliminare il commit dal repository remoto:

 git push -f origin last_known_good_commit:branch_name

Per eliminare il commit dal tuo repository locale:

git reset --hard HEAD~1

link

Elimina il commit più recente, mantenendo il lavoro svolto:

git reset --soft HEAD~1

Elimina il commit più recente, distruggendo il lavoro svolto:

git reset --hard HEAD~1

Trova le specifiche di riferimento del commit che vuoi essere il capo del tuo ramo su Github e usa il seguente comando:

git push origin +[ref]:[branchName]

Nel tuo caso, se vuoi solo tornare indietro di un commit, trova l'inizio del ref per quel commit, ad esempio è 7f6d03 e il nome del ramo che vuoi cambiare, ad esempio è master e procedi come segue:

git push origin +7f6d03:master

Il carattere più viene interpretato come --force, che sarà necessario poiché stai riscrivendo la cronologia.

Nota che ogni volta che <=> un impegno potresti potenzialmente riscrivere la storia di altre persone che uniscono il tuo ramo. Tuttavia, se riscontri il problema rapidamente (prima che qualcun altro unisca la tua filiale), non avrai problemi.

Devi conoscere il tuo hash di commit dal commit che vuoi ripristinare. Puoi ottenerlo da un URL GitHub come: https://github.com/your -organizzazione / il-tuo-progetto / impegna / master

Supponiamo che l'hash del commit (dove vuoi tornare a) sia " 99fb454 " (versione lunga " 99fb45413eb9ca4b3063e07b40402b136a8cf264 "), quindi tutto ciò che devi fare è:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

Se lo stai facendo perché hai dati sensibili in un commit, usare le altre risposte qui non è sicuro (eccetto quelli di subutux, che espanderò).

La guida github su questo consiglia di utilizzare uno strumento esterno, ma io preferisco usare quello incorporato.

Innanzitutto, esegui un backup del tuo repository . Poi:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

Successivamente, assicurati che il repository sia nello stato desiderato . Potresti voler diff contro il backup.

Se sei sicuro che sia corretto, allora:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

Potresti voler conservare il backup locale per un po ', per ogni evenienza.

Esegui questo comando sul tuo terminale.

git reset HEAD~n

Puoi rimuovere gli ultimi n commit dal repository locale, ad es. HEAD ~ 2. Procedi con force git push sul tuo repository.

git push -f origin <branch>

Spero che questo aiuti!

Per preservare la struttura delle ramificazioni e delle fusioni è importante utilizzare l'opzione --preserve-merges quando si effettua il rebase:

git rebase --preserve-merges -i HEAD^^

Salva prima le modifiche locali da qualche parte sul lato (backup)

Puoi sfogliare i tuoi commit recenti, quindi selezionare un hash di commit facendo clic su " Copia l'intero SHA " per inviarlo negli Appunti.

Se il tuo ultimo hash di commit è, diciamo g0834hg304gh3084gh (per esempio)

Devi eseguire:

git push origin +g0834hg304gh3084gh:master

Usando l'hash che hai copiato in precedenza per renderlo " HEAD " revisione.

Aggiungi le modifiche locali desiderate. Fatto;)

Per GitHub

  • Ripristina i tuoi commit (HARD) nel tuo repository locale
  • Crea un nuovo ramo
  • Invia il nuovo ramo
  • Elimina ramo OLD (creane uno nuovo come ramo predefinito se stai eliminando il ramo principale)

se vuoi rimuovere do rebase interattivo,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit and modificalo di conseguenza

ed elimina il commit desiderato dall'elenco ...

salva le modifiche con Ctrl + X (ubuntu) o :wq(centos)

2o metodo, ripristina

git revert 29f4a2 #your commit ID

questo ripristinerà il commit specifico

Non è molto bello riscrivere la storia. Se utilizziamo git revert <commit_id>, viene creato un commit inverso pulito di detto ID commit.

In questo modo, la storia non viene riscritta, invece, tutti sanno che c'è stato un ritorno.

Aggiungi / rimuovi file per ottenere le cose come vuoi:

git rm classdir
git add sourcedir

Quindi modificare il commit:

git commit --amend

Il precedente, errato commit verrà modificato per riflettere il nuovo stato dell'indice - in altre parole, sarà come se non avessi mai commesso l'errore in primo luogo

Nota che dovresti farlo solo se non l'hai ancora fatto. Se hai spinto, dovrai solo eseguire una correzione normalmente.

In GitHub Desktop puoi semplicemente fare clic con il pulsante destro del mouse sul commit e ripristinarlo, creando così un nuovo commit che annulla le modifiche.

Il commit accidentale rimarrà comunque nella tua cronologia (che potrebbe essere un problema se, ad esempio, hai commesso accidentalmente una chiave API o una password) ma il codice verrà ripristinato.

Questa è l'opzione più semplice e facile, la risposta accettata è più completa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top