Elimina i commit da una filiale in Git


3233

Vorrei sapere come eliminare un commit.

Con delete, voglio dire che è come se non ho fatto che commettono, e quando lo faccio una spinta in futuro, le mie modifiche non spingerà al ramo remoto.

Ho letto git help e penso che il comando che dovrei usare sia git reset --hard HEAD. È corretto?


41
Penso che questo non sia un duplicato di Git annulla l'ultimo commit in quanto chiede come eliminare qualsiasi commit da un ramo. Penso anche che nessuna delle risposte affronti effettivamente questa domanda. Tutti riavvolgere gli ultimi commit, non cherry-picke deleteun singolo che potrebbe commettere accaduto qualche tempo fa.
Chris,

12
@Chris, la risposta con git rebase -i HEAD~10risponde alla domanda, in quanto ti consente di scegliere arbitrariamente commit da eliminare. Git applica i commit nell'intervallo specificato uno a uno, ignorando i commit rimossi dal registro. Ho usato questo comando oggi per eliminare il secondo e il terzo commit più recente per il mio repository mantenendo quello principale. Concordo sul fatto che nessuna delle altre risposte è soddisfacente.
MST,

@MST sì, avrei dovuto dirlo, nessuna delle opzioni nella risposta accettata risponde a questa domanda, ma hai assolutamente ragione - quel comando sembra funzionare
Chris

Risposte:


4128

Attento: git reset --hard ELIMINERÀ I VOSTRI CAMBIAMENTI DI DIRECTORY . Assicurati di riporre eventuali modifiche locali che desideri conservare prima di eseguire questo comando.

Supponendo che tu sia seduto su quel commit, questo comando lo annullerà ...

git reset --hard HEAD~1

I HEAD~1mezzi le impegnano prima testa.

In alternativa, è possibile esaminare l'output di git log, trovare l'id di commit del commit su cui si desidera eseguire il backup e quindi procedere come segue:

git reset --hard <sha1-commit-id>

Se l'hai già spinto, dovrai fare una spinta forzata per sbarazzartene ...

git push origin HEAD --force

Tuttavia , se altri potrebbero averlo estratto, sarebbe meglio iniziare un nuovo ramo. Perché quando tirano, lo uniranno semplicemente nel loro lavoro e lo farai risalire di nuovo.

Se hai già premuto, potrebbe essere meglio usare git revert, per creare un commit "mirror image" che annullerà le modifiche. Tuttavia, entrambi i commit saranno nel registro.


Cordiali saluti - git reset --hard HEADè fantastico se vuoi sbarazzarti di WORK IN PROGRESS. Ti ripristinerà il commit più recente e cancellerà tutte le modifiche nella struttura e nell'indice di lavoro.


Infine, se hai bisogno di trovare un commit che hai "cancellato", in genere è presente a git reflogmeno che tu non abbia garbage collection nel tuo repository.


59
HEAD~1o solo HEAD^. Se hai spinto, dovresti usare git revertinvece.
Jakub Narębski,

13
Ovviamente puoi anche usare HEAD~nper "tornare indietro" ncommit dalla tua testa. Forse da questo punto puoi interpretare ... --hard HEADanche come HEAD~0=> l'eliminazione dei lavori in corso.
nuala l'

13
@ beamrider9 imho git rebase è quasi sempre il modo migliore per eliminare i commit (come descritto nella risposta di Greg Hewgill) - non da ultimo perché rebase include in realtà un grosso avvertimento che cancellerai cose 4realz.
Noah Sussman,

20
ciò tuttavia non elimina le modifiche dall'albero di commit. L'OP ha richiesto un commit già effettuato. Se tu reset --hard, e controlla il log --oneline --all, gli commit rimangono ancora nell'albero. Come eliminiamo questi commit dall'albero? Grazie.
iGbanam,

17
utilizzare reset --softper eliminare il commit locale SENZA ripristinare i lavori in corso!

704

Se il commit non è stato ancora inviato da nessuna parte, è possibile utilizzare git rebase -iper rimuoverlo. Innanzitutto, scopri quanto è indietro (approssimativamente) il commit. Quindi fa:

git rebase -i HEAD~N

Il ~Nmezzo ripristina l'ultimo Ncommit ( Ndeve essere un numero, ad esempio HEAD~10). Quindi, puoi modificare il file che Git ti presenta per eliminare il commit offensivo. Al salvataggio di quel file, Git riscriverà quindi tutti i seguenti commit come se quello che hai eliminato non esistesse.

Il Git Book ha una buona sezione sulla rigenerazione con immagini ed esempi.

Fate attenzione con questo però, perché se si cambia qualcosa che hanno spinto altrove, sarà necessario un altro approccio a meno che non si sta progettando di fare una spinta forza.


2
Nota: se ti capita di avere delle fusioni --no-ff nell'ultimo batch di commit, rebase le macellerà :( Questo è menzionato sotto -p in questa pagina . Il problema è, se si sostituisce -i con -p, non si ottiene più quel pop-up con le opzioni per "modifica questo commit, sqush quello", ecc. ecc. Qualcuno conosce la soluzione?
Bukov

4
E se l'avessi spinto? (solo io usando il repository remoto)
Costa

6
@Costa è possibile utilizzare push -fper forzare la spinta e sostituire il ramo remoto con quello locale. Se è solo il tuo repository remoto, nessun problema. Il problema inizia se nel frattempo qualcun altro ha recuperato.
Greg Hewgill,

3
Ho aggiunto e eseguito il commit di un file di dati troppo grande per GitHub (sì, probabilmente non dovrebbe comunque essere nel repository di origine; vabbè). Quando ho provato a spingere, GitHub ha rifiutato a causa del file troppo grande. Tutto quello che volevo fare era annullare questo commit, salvando alcuni altri commit non correlati che seguirono. Il git rebase -i HEAD~5comando era esattamente quello di cui avevo bisogno per rimuovere completamente questo commit dal mio repository locale! Grazie!
aldo,

4
@dumbledad: con rebase -i, le modifiche corrispondenti al commit eliminato non vengono mantenute.
Greg Hewgill,

517

Un'altra possibilità è uno dei miei comandi preferiti personali:

git rebase -i <commit>~1

Questo avvierà il rebase in modalità interattiva -inel punto appena prima del commit che vuoi colpire. L'editore inizierà a elencare tutti i commit da allora. Eliminare la riga contenente il commit che si desidera cancellare e salvare il file. Rebase farà il resto del lavoro, eliminando solo quel commit e ripetendo tutti gli altri nel registro.


3
grazie, se si verificano problemi (come commit vuoti) è possibile utilizzaregit rebase --continue
realgt

8
Ancora più facile: git rebase -i HEAD~1
mmell

2
Wowzers. git rebase -i HEAD~1ho davvero ripulito molto il repo! È difficile dire esattamente cosa ha fatto, ma il tutto sembra molto più ordinato. Un po 'allarmante, in realtà.
Charles Wood,

7
Penso che valga la pena notare che il commit non viene cancellato, ma semplicemente rimosso dall'elenco. Se sbagli, puoi recuperare il commit usando il reflog .
Zaz,

6
L'eliminazione della riga equivale a d / drop?
Leo,

345

Sto aggiungendo questa risposta perché non vedo perché chiunque abbia appena provato a impegnare il lavoro vorrebbe eliminare tutto quel lavoro a causa di un errore nell'utilizzo di Git!

Se vuoi mantenere il tuo lavoro e semplicemente "annullare" quel comando di commit (hai catturato prima di spingere in repo):

git reset --soft HEAD~1

Non utilizzare il flag --hard a meno che non si desideri distruggere i lavori in corso dall'ultimo commit.


5
Ecco un esempio del perché: fai un piccolo lavoro su un server di sviluppo che commetti. Quindi si scopre che quel server non ha accesso HTTPS in uscita, quindi non è possibile inviare il commit da nessuna parte. È più semplice fingere che non sia mai successo e rifare la patch dal tuo computer locale.
Steve Bennett,

1
@KarthikBose ci sarebbe sempre il reflog. anche dopo git reset --hard HEAD~1l'ultimo commit precedente sarebbe disponibile tramite reflog (fino alla scadenza); vedi anche qui: gitready.com/intermediate/2009/02/09/…
codifica il

4
Grazie. Questa risposta dovrebbe essere classificata più in alto o inclusa nella risposta accettata. Eliminazione di un commit! = Ripristino di un commit.
Alsciende,

2
@RandolphCarter: perderai comunque eventuali modifiche non confermate.
naught101

7
@Rob, un esempio è quando si commette accidentalmente un file che contiene un segreto (ad esempio una password) che non dovrebbe mai essere nel controllo del codice sorgente. Il commit locale deve essere distrutto , non solo annullato, quindi non verrà mai inviato al server.
Bob Meyers,

142

Rimozione di un intero commit

git rebase -p --onto SHA^ SHA

Ovviamente sostituisci "SHA" con il riferimento di cui vuoi sbarazzarti. Il "^" in quel comando è letterale.

http://sethrobertson.github.io/GitFixUm/fixup.html#change_deep


26
come posso valutare di più questa risposta ??? le altre soluzioni stanno solo mostrando come farlo in modo interattivo o per rimuovere i commit principali.
ribamar,

5
-p, --preserve-merges Ricrea i commit di unione invece di appiattire la cronologia riproducendo i commit che introduce un commit di unione. Unire le risoluzioni dei conflitti o le modifiche manuali per unire i commit non vengono conservati.
raittes il

5
Questa è la risposta esatta effettiva
Hamman Samuel

9
Dice "sostituisci SHA con il riferimento di cui vuoi sbarazzarti", ma la linea contiene SHA due volte. Ecco cosa ho fatto. git rebase -p --onto 5ca8832c120 ^ 5ca8832c120 Ma non è cambiato nulla. Dovrei usare lo stesso SHA due volte? In caso contrario, qual è lo SHA per il commit da rimuovere e quale dovrebbe essere l'altro SHA?
Rubicksman

3
WOW, ha funzionato perfettamente! Questa dovrebbe essere la risposta accettata!
Liran H

51

Se non hai pubblicato le modifiche, per rimuovere l'ultimo commit, puoi farlo

$ git reset --hard HEAD^

(nota che ciò eliminerebbe anche tutte le modifiche non confermate; usare con cura).

Se hai già pubblicato un commit da cancellare, usa git revert

$ git revert HEAD

Non ha funzionato. Quando eseguo il log, tutto è ancora lì, non importa perché lo faccio, aggiunge solo più commit. Voglio ripulire la storia.
Costa

@Costa: cosa non ha funzionato (ovvero quale versione hai usato) e come hai eseguito il log?
Jakub Narębski,

Ho provato quasi tutto su questo D&R. (Ho provato git a ripristinare HEAD, l'ultima volta) Il mio registro git:tree = log --all --graph --format=format:'%C(bold blue)%h%C(reset) %C(dim black)%s%C(reset)%C(bold red)%d%C(reset) %C(green)by %an, %ar%C(reset)'
Costa

1
Voglio solo cancellare i commit (come se non fossero mai esistiti). Sono partito per una strana avventura di programmazione, con diversi nuovi commit e tutto è finito per essere spazzatura. Come posso semplicemente cancellarli dal mio log git?
Costa

2
Santa merda qualcosa magicamente ha fatto esattamente quello che volevo .... quale di quei comandi ha fatto? !!?!
Costa

45

Supponiamo di voler rimuovere i commit 2 e 4 dal repository.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Nota: è necessario disporre dei diritti di amministratore sul repository poiché si sta utilizzando --harde -f.

  • git checkout b3d92c5 Verifica l'ultimo commit utilizzabile.
  • git checkout -b repair Crea un nuovo ramo su cui lavorare.
  • git cherry-pick 77b9b82 Esegui commit 3.
  • git cherry-pick 2c6a45b Esegui commit 1.
  • git checkout master Checkout master.
  • git reset --hard b3d92c5 Ripristina master per l'ultimo commit utilizzabile.
  • git merge repair Unisci la nostra nuova filiale al master.
  • git push -f origin master Spingere il master nel repository remoto.

1
l'ultimo passo dovrebbe essere che git push -f origin masternon esiste alcuna opzione--hard
Vivex,

2
Immagino commit 0sia più vecchio di commit 1. Per favore, potresti dirmi perché prima ho attraversato commit 3(con cherry-pick) e poi commit 1? Dopo il checkout di b3d92cd( commit 0) mi aspetterei cherry-pick commit 1, quindi commit 3. Grazie.
Jarek C,

@JarekC Penso che il commit più alto sia il più recente, qui a meno che non stia vedendo qualcosa di sbagliato ...
Jeff Huijsmans

41
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId fa riferimento a quello a cui desideri ripristinare


git push --force <origin> <branchName>. come senza menzionare il nome del ramo potrebbe cambiare tutti i file sul telecomando.
sheelpriy,

39

Cambia storia con forza

Supponendo che non si desideri eliminare solo l'ultimo commit, ma si desidera eliminare specifici commit degli ultimi n commit, procedere con:

git rebase -i HEAD~<number of commits to go back>, quindi git rebase -i HEAD~5se vuoi vedere gli ultimi cinque commit.

Poi nell'editor di testo modificare la parola pickper dropaccanto ad ogni commit che si desidera rimuovere. Salva ed esci dall'editor. Ecco!

Cronologia delle modifiche aggiuntive

Prova git revert <commit hash>. Ripristina creerà un nuovo commit che annulla il commit specificato.


dropla parola chiave non è definita. Per eliminare un commit basta rimuovere l'intera riga.
Shayan Salehian,

1
Per me il drop è stato definito come una parola chiave, ma fare un drop non sembra rimuovere il commit dalla cronologia. La rimozione della linea dal rebase interattivo tuttavia ha funzionato.
Adam Parkin,

Questo è esattamente ciò di cui avevo bisogno. Funziona alla grande; Grazie!
diekunstderfuge

30

Se si desidera correggere l'ultimo commit, è possibile annullare il commit e annullare la messa in scena dei file in esso, effettuando:

git reset HEAD~1

Questo riporterà il tuo repository al suo stato prima che git aggiunga comandi che hanno messo in scena i file. Le tue modifiche saranno nella tua directory di lavoro. HEAD ~ 1 si riferisce al commit sotto l'attuale punta del ramo.

Se si desidera annullare il commit di N commit, ma mantenere le modifiche al codice nella directory di lavoro:

git reset HEAD~N

Se si desidera eliminare l'ultimo commit e non si desidera mantenere le modifiche al codice, è possibile eseguire un ripristino "difficile".

git reset --hard HEAD~1

Allo stesso modo, se si desidera eliminare le ultime N commit e non si desidera mantenere le modifiche al codice:

git reset --hard HEAD~N

22
git rebase -i HEAD~2

Qui '2' è il numero di commit che si desidera modificare.

'git rebase -i HEAD`

se vuoi rifare tutti gli commit.

Quindi sarai in grado di scegliere una di queste opzioni.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Queste linee possono essere riordinate; vengono eseguiti dall'alto verso il basso. Se rimuovi una riga qui, QUESTO IMPEGNO SARÀ PERSO. Tuttavia, se rimuovi tutto, il rebase verrà interrotto. Si noti che i commit vuoti vengono commentati

Puoi semplicemente rimuovere quel commit usando l'opzione "d" o Rimuovere una linea che ha il tuo commit.


Nell'ultima versione di git non esiste più l'opzione d . È sufficiente rimuovere le righe con commit da rebase per eliminarle.
Oleg Abrazhaev, il

17

Per eliminare nella filiale locale, utilizzare

git reset --hard HEAD~1

Per eliminare in un ramo remoto, utilizzare

git push origin HEAD --force

12

[Risposta rapida]

Hai molte alternative, ad esempio:

  • Alternativa 1:

    git rebase -i <YourCommitId>~1
    

    Modifica YourCommitId per il numero del commit a cui desideri ripristinare.

  • Alternativa 2:

    git reset --hard YourCommitId
    git push <origin> <branch> --force
    

    Modifica YourCommitId per il numero del commit a cui desideri ripristinare.

    Non consiglio questa opzione perché potresti perdere il lavoro in corso.

  • Alternativa 3:

    git reset --soft HEAD~1
    

    Puoi mantenere il tuo lavoro e annullare solo il commit.


grazie grazie grazie (Y)
Habib Rehman,

11

Fonte: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Elimina l'ultimo commit

Ad esempio il tuo ultimo commit

git push origin + aa61ab32 ^: master

Ora vuoi eliminare questo commit, quindi un modo semplice per farlo come segue

passi

  1. Innanzitutto reimpostare il ramo sul genitore del commit corrente

  2. Spingerlo forzatamente sul telecomando.

git reset HEAD^ --hard

git push origin -f

Per il commit particolare, si desidera reimpostare quanto segue

git reset bb676878^ --hard

git push origin -f

9

Ecco un altro modo per farlo:

Verifica il ramo che desideri ripristinare, quindi reimposta la tua copia di lavoro locale sul commit che desideri sia l'ultimo sul server remoto (tutto ciò che segue andrà via ciao). Per fare ciò, in SourceTree ho fatto clic con il tasto destro del mouse sul e ho selezionato "Ripristina BRANCHNAME su questo commit". Penso che la riga di comando sia:

git reset --hard COMMIT_ID

Dal momento che hai appena verificato la tua filiale da remoto, non avrai alcuna modifica locale di cui preoccuparti di perdere. Ma questo li perderebbe se lo facessi.

Quindi vai alla directory locale del tuo repository ed esegui questo comando:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Questo cancellerà tutti i commit dopo quello corrente nel tuo repository locale ma solo per quel ramo.


9

L'errore:

Ho modificato git rebase -i --rootil mio ramo, pensando con ignoranza che avrei potuto riformulare il primo commit diverso dal master (la visualizzazione predefinita di GitHub per Windows è il confronto con il master, nascondendone la totalità).

Mi sono fatto crescere la barba della Silicon Valley mentre oltre 900 si sono caricati in Sublime. Uscendo senza modifiche, ho caricato la mia batteria e poi ho iniziato a radermi, poiché tutti i 900+ utenti si sono trasferiti con nonchalance, ripristinando i loro tempi di commit fino ad ora.

Determinato a battere Git e preservare i tempi originali, ho eliminato questo repository locale e ri-clonato dal telecomando.

Ora aveva aggiunto nuovamente un commit non necessario più recente al master che desideravo rimuovere, quindi ho proceduto in questo modo.

Esaurendo le opzioni:

Non volevo git revert- avrebbe creato un ulteriore impegno, dando a Git il sopravvento.

git reset --hard HEADnon ha fatto nulla, dopo aver verificato il reflog, l'ultimo e unico è HEADstato il clone - Git vince.

Per ottenere lo SHA più recente, ho controllato il repository remoto su github.com - vincita minore.

Dopo aver pensato che git reset --hard <SHA>avesse funzionato, ho aggiornato un altro ramo per master e 1 ... 2 ... poof! il commit è tornato - Git vince.

Tornando al master, è tempo di provare git rebase -i <SHA>, quindi rimuovere la linea ... inutilmente, triste da dire. " Se rimuovi una linea qui QUELLO IMPEGNO SARÀ PERSO ". Ah ... sorvolato sulle nuove funzionalità, troll dell'n00b nelle note di rilascio 2.8.3 .

La soluzione:

git rebase -i <SHA>allora d, drop = remove commit.

Per verificare, ho controllato su un altro ramo e voilà - nessun impegno nascosto per recuperare / estrarre dal master.

https://twitter.com/holman/status/706006896273063936

Buongiorno a te.


8

Tutti i comandi sopra riportati ripristinano lo stato dell'albero di lavoro e dell'indice come erano prima di effettuare il commit, ma non ripristinano lo stato del repository. Se lo guardi, il commit "rimosso" non viene effettivamente rimosso, semplicemente non è quello sulla punta del ramo corrente.

Penso che non ci siano mezzi per rimuovere un commit con i comandi di porcellana . L'unico modo è quello di rimuoverlo dal registro e reflog e quindi eseguire un git prune --expire -now.


1
L'ordine in cui le risposte vengono visualizzate su StackOverflow non è fisso. Si prega di non fare riferimento a "Tutti i comandi sopra". Crea la tua risposta autonoma.
Pascal Cuoq,

Questa risposta non è del tutto corretta. git prune è in realtà uno dei comandi "porcellana" . Inoltre, è raro che tu voglia cancellare completamente il tuo reflog (un caso d'uso è rimuovere informazioni sensibili dal tuo repository, ma come ho detto, è un caso d'uso raro). Il più delle volte, ti consigliamo di mantenere i vecchi commit nel reflog, nel caso in cui sia necessario recuperare i dati. Vedi Pro Git: 9.7 Git Internals - Manutenzione e recupero dati .

8

Se vuoi conservare la cronologia, mostrando il commit e il ripristino, dovresti usare:

git revert GIT_COMMIT_HASH

inserisci il messaggio che spiega perché stai ripristinando e quindi:

git push  

Quando emetti git logvedrai sia i messaggi di log "commit" che quelli di ripristino "errati".


Sì, ma l'OP era chiaro che non è quello che vogliono.
Steve Bennett,

7

Se hai appena incasinato il tuo ultimo commit (messaggio sbagliato, hai dimenticato di aggiungere alcune modifiche) e vuoi correggerlo prima di inviarlo a un repository pubblico, perché non usare:

git commit --amend -m "New message here"

Se hai apportato modifiche di recente, queste verranno combinate con l'ultimo commit (di cui stai tentando di eliminare) e sostituiranno quel commit.

Ovviamente se modifichi un commit dopo averlo inviato, stai riscrivendo la cronologia, quindi se lo fai assicurati di capirne le implicazioni.

Puoi anche passare l'opzione '--no-edit' invece di '-m' se preferisci usare il messaggio del commit precedente.

Documenti: http://git-scm.com/docs/git-commit.html


2
Non è ciò che OP richiede.
Steve Bennett,

5

Se hai già eseguito il push, trova prima il commit che desideri essere su HEAD ($ GIT_COMMIT_HASH_HERE) , quindi esegui quanto segue:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Quindi ogni posto in cui il repository è stato clonato, eseguire:

git reset --hard origin/master

5

Cosa faccio di solito quando commetto e spingo (se qualcuno ha spinto il suo commit questo risolve il problema):

git reset --hard HEAD~1

git push -f origin

spero che questo aiuto


5

Ho già spinto. È necessario restituire alcuni commit in remoto. Ho provato molte varianti, ma solo questo da Justin tramite git bush funziona bene per me:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

4

Ripristina su filiale locale

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

Forza la spinta all'origine

git push -f origin

3

Effettua il backup del codice nella cartella temporanea. Il comando seguente ripristinerà lo stesso del server.

git reset --hard HEAD
git clean -f
git pull

Se si desidera mantenere le modifiche e rimuovere i commit recenti

git reset --soft HEAD^
git pull


2

elimina commit locale

Come puoi vedere nell'immagine sopra voglio eliminare il commit "test change 2" ripristinato (ID SHA1: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (puoi ottenere l'ID SHA1 usando il gitkcomando in git bash)).

Per quello che posso usare (tutti i comandi di seguito funzionano solo su locale. Devi premere dopo l'eliminazione):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// esegue il backup di tale commit (l'ID SHA1 del commit di modifica modifica 4 è 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // ti esegue il backup prima di un commit.
  3. git reset --hard HEAD^ // Per rimuovere l'ultimo commit da git

dopo l'eliminazione:

dopo aver eliminato il commit


2

git reset --hard HEAD~1
Sarai ora al capo precedente. Tirare il ramo. Invia nuovo codice. Commit verrà rimosso da git


A meno che tu non abbia già spinto le modifiche. In tal caso, il ripristino completo non pulirà il telecomando. In tal caso, rebase è la buona opzione
c0der512

1

git reset --hard

git push origin HEAD --force

Se uno o più commit sono taggati, elimina prima i tag. In caso contrario, il commit con tag non viene rimosso.


0

usa git revert https://git-scm.com/docs/git-revert . Ripristinerà tutto il codice, quindi potrai fare il prossimo commit. Quindi head punterà a quell'ultimo commit. i commit ripristinati non vengono mai eliminati ma non influiranno sull'ultimo commit.


0

Nel mio caso, il mio codice magico per questo allievo è questo:

git reset --hard @{u}

Provalo e dimmelo. Ne ho provate alcune diverse, ma questa è stata l'unica che mi ha aiutato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.