Domanda

Mi piacerebbe sapere come eliminare un commit.

Per 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?

È stato utile?

Soluzione

Attenzione: git reset --hard cancellerà TUO LAVORO modifiche directory . Assicurati di riporre eventuali modifiche locali che si desidera mantenere prima di eseguire questo comando.

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

git reset --hard HEAD~1

Il HEAD~1 significa il commit prima di testa.

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

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

Se già spinto esso, è 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 log.


A proposito - git reset --hard HEAD è grande se si vuole sbarazzarsi di lavori in corso. Si ripristinerà indietro alla più recente impegnarsi, e cancellare tutte le modifiche nel vostro albero di lavoro e l'indice.


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

Altri suggerimenti

Se non si è ancora spinto il commit ovunque, è possibile utilizzare git rebase -i da rimuovere che commettono. In primo luogo, scoprire quanto lontano che commettono è (circa). Poi fare:

git rebase -i HEAD~N

Il ~N significa rebase l'ultima N impegna (N deve 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 sarà quindi riscrivere tutti i seguenti commit come se quello che avete cancellato non esisteva.

Il Git libro ha una buona sezione rebasing con immagini e esempi.

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

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

git rebase -i <commit>~1

Verrà avviata la rebase in -i modalità interattiva nel 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.

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.

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

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-commit eliminati, utilizzare git tornare

$ git revert HEAD
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId riferisce quello che si desidera tornare a

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 e --hard -f

.
  • git checkout b3d92c5 Acquista l'ultimo utilizzabile commesso.
  • git checkout -b repair Creare un nuovo ramo su cui lavorare.
  • Esegui git cherry-pick 77b9b82 attraverso commettere 3.
  • Esegui git cherry-pick 2c6a45b attraverso commettere 1.
  • git checkout master Checkout master.
  • git reset --hard b3d92c5 Ripristino generale per durare utilizzabile commit.
  • git merge repair Unisci la nostra nuova filiale sul master.
  • git push -f origin master Spingere master per il repo remoto.

con forza Cronologia delle modifiche

Supponendo che non si vuole solo cancellare l'ultimo commit, ma 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~5 se volete vedere gli ultimi cinque commit.

Poi nell'editor di testo modificare la parola pick per drop accanto ad ogni commit che si desidera rimuovere. Salvare e chiudere l'editor. Voila!

in modo additivo Cronologia delle modifiche

Prova git revert <commit hash>. Revert creerà un nuovo commit che annulla l'specificato commesso.

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

git reset HEAD~1

Questo 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 alla impegnare sotto la punta corrente del ramo.

Se si vuole uncommit N impegna, ma mantenere il codice cambia nella vostra 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 mantenere le modifiche al codice:

git reset --hard HEAD~N
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

Queste linee possono essere riordinati; 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 impegno.

Per eliminare in sede locale, utilizzare

git reset --hard HEAD~1

Per eliminare in un ramo remoto, utilizzare

git push origin HEAD --force

Ecco un altro modo per farlo:

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 hai intenzione di avere tutti i cambiamenti locali preoccuparsi di perdere. Ma questo sarebbe perderli 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.

L'errore:

I git rebase -i --root'ed mio ramo, ignoranza, pensando che avrei potuto riformulare il primo commit diverse da master ( GitHub for Windows visualizzazione predefinita è il confronto al padrone, nascondendosi 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 = -. Reset 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.

aspiranti le opzioni:

Non ho voluto git revert -. Creerebbe un ulteriore commit, dando Git il sopravvento

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

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

Dopo aver pensato git reset --hard <SHA> aveva 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 di provare git rebase -i <SHA>, quindi rimuovere la riga ... senza alcun risultato, purtroppo. " Se si rimuove una linea qui che si impegnano andranno perse ". Ah ... sorvolato nuova funzione di troll il n00b nella 2.8.3 note di rilascio .

La soluzione:

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

Per verificare, ho verificato ad un altro ramo, e voilà -. Non nascondersi impegnarsi per recuperare / pull dal master

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

Buon giorno a te.

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 . L'unico modo è quello di rimuovere dal registro e reflog e poi eseguire un git prune --expire -now.

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

Elimina gli ultimi commit

Per esempio il tuo ultimo commit

origine git push + aa61ab32 ^: master

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

I passaggi

  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

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 modifiche essi saranno combinati con l'ultima 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.

È anche 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

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 e poi:

git push  

Quando si emette git log vedrete sia il "sbagliato" di commit e ripristinare messaggi di log.

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

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

speranza questo aiuto

Reset sul ramo locale

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

forza di spinta alla loro origine

git push -f origin

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

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

Se si desidera mantenere le modifiche, e rimuovere commit recenti

git reset --soft HEAD^
git pull

delete locale commit

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

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

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2 // it back-up a quell'hotel commit (ID SHA1 di cambio di prova 4 commit è 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 eliminazione:

dopo eliminare commit

ho già spinto. Necessità di restituire alcuni commit indietro remotly. Hanno provato molte variazioni, ma solo questo da Justin tramite cespuglio git sta lavorando bene per me:

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

git ripristinare --hard

git push origine HEAD force

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

// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

Riferimento: Come eliminare un commit in git, locale e remota

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

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.

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