Eliminare impegna da un ramo in Git

voti
2k

Mi piacerebbe sapere come eliminare un commit.

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

Ho letto git aiuto, e penso che il comando dovrei usare è git reset --hard HEAD. È corretto?

È pubblicato 27/08/2009 alle 04:39
fonte dall'utente
In altre lingue...                            


27 risposte

voti
3k

Attenzione: git reset --hard eliminira LAVORO modifiche alla directory . Assicurarsi di riporre eventuali modifiche locali che si desidera conservare prima di eseguire questo comando.

Supponendo che si sono seduti su quel commit, allora questo comando wack esso ...

git reset --hard HEAD~1

I HEAD~1mezzi il impegnano prima testa.

Oppure, si potrebbe guardare l'output di git log, trovare l'ID del impegnano che si desidera eseguire il backup su, e poi fare questo commit:

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

Se già lo spinse, è necessario fare una spinta forza per sbarazzarsi di esso ...

git push origin HEAD --force

Tuttavia , se gli altri possono aver tirato, allora si sarebbe meglio iniziare una nuova filiale. Perché quando tirano, sarà solo si fondono nel loro lavoro, e lo otterrà spinto indietro di nuovo.

Se già spinto, può essere meglio usare git revert, per creare un "immagine speculare" commit che annullare le modifiche. Tuttavia, entrambi i commit saranno nel registro.


CRONACA - git reset --hard HEADè grande se si vuole sbarazzarsi di lavori in corso. Si ripristinerà indietro alla più recente impegnarsi, e cancellare tutti i cambiamenti nel vostro albero di lavoro e l'indice.


Infine, se avete bisogno di trovare un commit che "cancellato", è in genere presente in git reflogmeno che non si dispone di garbage collection proprio repository.

Risposto il 27/08/2009 a 04:44
fonte dall'utente

voti
588

Se non avete ancora spinto il commit ovunque, è possibile utilizzare git rebase -iper rimuovere che commettono. In primo luogo, scoprire quanto lontano che commettono è (circa). Quindi fa:

git rebase -i HEAD~N

I ~Nmezzi ricalcolano gli ultimi Ncommit ( Ndeve essere un numero, ad esempio HEAD~10). Quindi, è possibile modificare il file che Git presenta a voi per eliminare l'incriminato commesso. Su salvare il file, Git poi riscrivere tutte le seguenti commit come se quello è stato eliminato non esisteva.

Il Git libro ha una buona sezione rebasing 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.

Risposto il 27/08/2009 a 04:51
fonte dall'utente

voti
406

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

git rebase -i <commit>~1

Verrà avviata la rebase in modalità interattiva -ial punto appena prima del commit si vuole colpire. L'editor si avvia che elenca tutte le 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 che commettono, e riprodurre tutti gli altri di nuovo nel registro.

Risposto il 27/08/2009 a 04:49
fonte dall'utente

voti
276

Sto aggiungendo questa risposta perché non vedo il motivo per cui qualcuno che ha appena tentato il lavoro vorrebbe eliminare tutto quel lavoro a causa di qualche errore usando Git!

Se si desidera mantenere il vostro lavoro e basta 'annullare' che commettono il comando (hai preso prima di spingere a pronti contro termine):

git reset --soft HEAD~1

Non utilizzare il --hard bandiera a meno che non si vuole distruggere il lavoro in corso dall'ultimo commit.

Risposto il 15/10/2012 a 19:17
fonte dall'utente

voti
46

Se non si pubblichi le modifiche, per rimuovere ultima commit, si può fare

$ git reset --hard HEAD^

(Si noti che questo sarebbe anche rimuovere tutte le modifiche non; utilizzare con cautela).

Se hai già pubblicato a-essere-cancellato commesso, uso git revert

$ git revert HEAD
Risposto il 27/08/2009 a 11:47
fonte dall'utente

voti
40

Rimozione di un intero commit

git rebase -p --onto SHA^ SHA

Ovviamente sostituire "SHA" con il riferimento che si desidera eliminare. Il "^" in quel comando è letterale.

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

Risposto il 31/08/2015 a 19:36
fonte dall'utente

voti
31
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId riferisce quello che si desidera ripristinare

Risposto il 16/10/2014 a 10:51
fonte dall'utente

voti
29

Se si vuole risolvere il tuo ultimo commit, è possibile annullare il commit, e unstage i file in esso, facendo:

git reset HEAD~1

Ciò restituirà il repository al suo stato prima che il git add comandi che in scena i file. Le modifiche saranno nella directory di lavoro. HEAD ~ 1 si riferisce al commit sotto la punta corrente del ramo.

Se si vuole uncommit N impegna, ma mantenere le modifiche al codice nella directory di lavoro:

git reset HEAD~N

Se si vuole sbarazzarsi della vostra ultima impegnarsi, e non si desidera mantenere le modifiche al codice, si può fare un "duro" reset.

git reset --hard HEAD~1

Allo stesso modo, se si vuole annullare l'ultima N impegna, e non vogliono tenere il codice cambia:

git reset --hard HEAD~N
Risposto il 31/05/2014 a 08:19
fonte dall'utente

voti
19

Con forza Storia Modifica

Dando per scontato che non vogliono solo per cancellare l'ultimo commit, ma che si desidera eliminare impegna specifiche degli ultimi n commit, andare con:

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

Poi nell'editor di testo modificare la parola pickper dropaccanto ad ogni commit che si desidera rimuovere. Salvare e chiudere l'editor. Ecco!

Additivo Storia Modifica

Prova git revert <commit hash>. Revert creerà una nuova commit che annulla l'specificato commit.

Risposto il 15/06/2017 a 23:01
fonte dall'utente

voti
15

Diciamo che vogliamo rimuovere commit 2 e 4 dal repo.

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

Nota: È necessario disporre di diritti di amministratore sul repo dal momento che si sta utilizzando --harde -f.

  • git checkout b3d92c5 Checkout l'ultima utilizzabile commit.
  • git checkout -b repair Creare un nuovo ramo su cui lavorare.
  • git cherry-pick 77b9b82 Corri attraverso impegnarsi 3.
  • git cherry-pick 2c6a45b Corri attraverso commettere 1.
  • git checkout master Checkout master.
  • git reset --hard b3d92c5 Ripristino generale per durare utilizzabile commit.
  • git merge repair Unire la nostra nuova filiale sul master.
  • git push -f origin master Premere master per il repo remoto.
Risposto il 05/09/2017 a 07:19
fonte dall'utente

voti
14
git rebase -i HEAD~2

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

'git rebase -i HEAD`

se si desidera rebase tutti i commit.

Allora si sarà 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

Tali linee possono essere riordinate; sono effettuate da cima a fondo. Se si rimuove una linea qui che si impegnano andranno perduti. Tuttavia, se si rimuove tutto, il rebase verrà interrotta. Si noti che impegna vuote sono commentate

È possibile rimuovere semplicemente che commettono utilizzando l'opzione "d" o rimozione di una linea che ha il vostro commit.

Risposto il 18/05/2016 a 23:39
fonte dall'utente

voti
11

Per eliminare in sede locale, utilizzare

git reset --hard HEAD~1

Per eliminare in un ramo remoto, utilizzare

git push origin HEAD --force
Risposto il 28/08/2014 a 17:06
fonte dall'utente

voti
7

L'errore:

I git rebase -i --root'ed il mio ramo, ignoranza, pensando che avrei potuto riformulare il primo commit diverso dal master (la GitHub for Windows visualizzazione predefinita è il confronto di padroneggiare, nascondendo sua interezza).

Sono cresciuta la barba Silicon Valley mentre 900+ commit stessi caricati in Sublime. Uscita senza modifiche, ho caricato la mia batteria poi proceduto a radersi, come tutti 900+ individuo impegna i nonchalance base di riferimento = - reimpostare le loro commettere volte per ora.

Determinata a battere Git e preservare le volte originali, ho cancellato questo repository locale e ri-clonato dal telecomando.

Ora si era ri-aggiunto un non necessario più recente impegnano a padroneggiare ho voluto rimuovere, quindi proceduto in questo modo.

Esaurire le opzioni:

Io non desidero git revert- creerebbe un ulteriore commit, dando Git il sopravvento.

git reset --hard HEADnon ha fatto nulla, dopo aver controllato la reflog, l'ultimo e unico HEADera il clone - Git vince.

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

Dopo averci pensato git reset --hard <SHA>avevano lavorato, ho aggiornato un altro ramo da padroneggiare e 1 ... 2 ... puf! il commit era tornato - Git vince.

Controllo di nuovo fuori al maestro, il tempo per provare git rebase -i <SHA>, quindi rimuovere la linea ... senza alcun risultato, purtroppo. " Se si rimuove una linea qui che commettono saranno persi ". Ah ... sorvolato nuova funzione troll il n00b nelle 2.8.3 note di rilascio .

La soluzione:

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

Per verificare, ho verificato ad un altro ramo, e voilà - senza nascondersi impegno a recuperare / pull dal master.

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

Buongiorno a te.

Risposto il 25/05/2016 a 20:33
fonte dall'utente

voti
7

Ecco un altro modo per fare questo:

Checkout il ramo che si desidera ripristinare, quindi reimpostare la copia di lavoro locale al commettere che si desidera essere quello più recente sul server remoto (tutto quello che segue andrà bye-bye). Per fare questo, in SourceTree right-cliccato sul e selezionato "Reset branchname a questo commit". Penso che la linea di comando è:

git reset --hard COMMIT_ID

Dal momento che appena controllato la vostra filiale da remoto, non sta andando ad avere eventuali modifiche locali preoccuparsi di perdere. Ma questo li perderebbe se l'avete fatto.

Quindi passare alla directory locale del repository ed eseguire 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 attuale nel repository locale, ma solo per quella ramo.

Risposto il 13/05/2013 a 18:20
fonte dall'utente

voti
7

Tutti i comandi sopra ripristinare lo stato del vostro albero di lavoro e indice di come erano prima di fare il commit, ma non ripristinare lo stato del repository. Se la si guarda, il "rimosso" commit non viene effettivamente rimosso, non è semplicemente quello sulla punta del ramo corrente.

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

Risposto il 04/10/2012 a 08:19
fonte dall'utente

voti
5

Se si desidera mantenere la storia, che mostra il commit e il Revert, è necessario utilizzare:

git revert GIT_COMMIT_HASH

Inserisci il messaggio che spiega il motivo per cui stai tornando, quindi:

git push  

Quando si emette git logvedrete entrambi i messaggi "sbagliati" commit e ripristinare registro.

Risposto il 07/01/2015 a 15:13
fonte dall'utente

voti
5

Se hai appena incasinato il tuo ultimo commit (messaggio sbagliato, ha dimenticato di aggiungere alcune modifiche) e si vuole risolvere il problema prima di spingere a un repo pubblico perché non utilizzare:

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

Se si è di recente messo in scena le modifiche essi saranno combinati con l'ultimo commit (che si sta cercando di sbarazzarsi di) e sostituirà quella commit.

Naturalmente se modificare una commit dopo aver spinto, stai riscrivere la storia in modo se non che essere sicuri di capire le implicazioni.

È inoltre possibile passare l'opzione '--no-edit' invece di '-m' se si preferisce utilizzare il messaggio del commit precedente.

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

Risposto il 27/05/2014 a 00:24
fonte dall'utente

voti
3

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

Eliminare l'ultimo commit

Per esempio il tuo ultimo commit

push origin git + aa61ab32 ^: master

Ora si vuole eliminare questo commettere poi un modo semplice per fare questo segue

passi

  1. In primo luogo ripristinare il ramo al genitore della corrente commit

  2. Forza-spingerlo al telecomando.

git reset HEAD^ --hard

git push origin -f

Per particolari commit, si desidera ripristinare seguendo

git reset bb676878^ --hard

git push origin -f
Risposto il 22/06/2018 a 13:40
fonte dall'utente

voti
2

Quello che faccio di solito quando ho commesso e spinta (se qualcuno ha spinto il suo commettere questo risolve il problema):

git reset --hard HEAD~1

git push -f origin

spero che questo aiuto

Risposto il 14/06/2017 a 09:22
fonte dall'utente

voti
1

Se hai già spinto, prima trovare il commit si vuole essere alla testa ($ GIT_COMMIT_HASH_HERE) , quindi eseguire il seguente:

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

Poi ogni luogo del pronti contro termine è stato clonato, eseguire:

git reset --hard origin/master
Risposto il 30/01/2017 a 00:25
fonte dall'utente

voti
0

delete locale commettere

Come si può vedere sull'immagine voglio eliminare revert "cambiamento di prova 2" commit (ID SHA1: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (è possibile ottenere ID SHA1 utilizzando gitkil comando in git bash)).

Per che posso usare (. Tutti al di sotto dei comandi sul lavoro solo locali è necessario spingere dopo la cancellazione):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// ti back-up a quel commit (ID SHA1 del cambiamento di test 4 commettere è 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // it back-up voi prima di un commesso.
  3. git reset --hard HEAD^ // Per rimuovere l'ultimo commit da Git

dopo l'eliminazione:

dopo eliminare commettere

Risposto il 03/07/2018 a 06:51
fonte dall'utente

voti
0

Ripristina il ramo locale

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

Forza spinta all'origine

git push -f origin
Risposto il 29/05/2018 a 07:38
fonte dall'utente

voti
0

utilizzare git tornare https://git-scm.com/docs/git-revert .It ripristinare tutto il codice allora si può fare prossimo capo commit.Then punterà a quella dell'ultimo commit. per conversione impegna a non eliminare, ma non influirà su di voi l'ultima commit.

Risposto il 01/03/2017 a 15:15
fonte dall'utente

voti
0

git azzerato --hard

git push origine TESTA --force

Se uno o più dei commit è marcato, eliminare il tag (s) prima. Altrimenti i tag impegnano non viene rimosso.

Risposto il 24/07/2015 a 14:45
fonte dall'utente

voti
0

Supponendo che non si è spinto al repository remoto, è possibile ri-clonare il repository. Questo è stato il mio metodo di scelta un paio di volte.

Risposto il 31/12/2014 a 06:54
fonte dall'utente

Risposto il 18/07/2018 a 06:27
fonte dall'utente

voti
-1

Prendete il backup del vostro codice a cartella temporanea. A seguito di comando resettare stesso server.

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

Quindi copiare solo i file necessari dalla cartella Temp, quindi eseguire il commit

Risposto il 14/07/2016 a 11:25
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more