2012-03-16 8 views

risposta

3

Penso che si possa far ritirare a livello locale e spingere il risultato:

$ git reset HEAD^ --hard 
$ git push REMOTE -f 

Dove 'REMOTE' è il nome remoto.

+3

Tu * puoi * farlo, ma è sconsigliabile visto che chiunque altro ha afferrato i commit nel frattempo otterrà ... beh, per evitare parolacce, diciamo "dovranno lavorare duro per riprendersi dalle tue azioni ". :-) È meglio usare "git revert" per aggiungere un nuovo commit che annulla un commit precedente. (Pensa a un "ripristino" come "aggiungi un commit la cui patch è l'azione di annullare esattamente un commit precedente", poiché è quello che è.) – torek

+0

@torek Ci stavo pensando all'inizio, ma penso che shadowfax potrebbe avere altro scopi, come mantenere ogni commit remoto in grado di funzionare correttamente, altrimenti avrebbe pensato di "ripristinare e spingere". – peter

+1

Penso che potresti essere sorpreso da quante persone non capiscono "git revert".D'altra parte, ci potrebbe essere un motivo completamente diverso (come nella risposta di David M. Syzdek). In alcuni casi non ci sono buone soluzioni, solo la meno cattiva (che varia a seconda della situazione). – torek

27

Poiché è già stato eseguito il push dei commit in un repository remoto, il modo migliore è probabilmente quello di ripristinare i due commit in modo da non creare alcun problema per chiunque abbia già estratto dal repository remoto.

Esempi utilizzare la storia segue commit:

e512d38 Adding taunts to management. 
bd89039 Adding kill switch in case I'm fired. 
da8af4d Adding performance optimizations to master loop. 
db0c012 Fixing bug in the doohickey 

Se si desidera solo per ripristinare le commit senza modificare la storia, è possibile effettuare le seguenti operazioni:

git revert e512d38 
git revert bd89039 

In alternativa, se si don' Se vuoi che gli altri vedano che hai aggiunto il kill switch e quindi rimosso, puoi ripristinare il repository usando quanto segue (tuttavia, ciò causerà problemi ad altri che hanno già tirato le tue modifiche dal remoto):

git reset --hard da8af4d 
git push origin -f localBranch:remoteBranch 

dove è il nome del ramo locale e remoteBranch è il nome del ramo remoto.

+3

"Aggiungere insulti alla gestione" dà origine al vecchio (nuovo?) Adagio, "non bere e spingere". :-) – torek

+6

@torek Cosa posso dire, sono sia un bevitore impegnato che un committer bevente. –

0

Prima di tutto digitare questo comando.

git log -n 4 

Questo comando visualizzerà gli ultimi 4 commit con il loro SHA. Dopo questo tipo, il seguente comando.

git rebase -i SHA_ID 

Invece di SHA_ID digitare lo SHA del commit prima del commit che si desidera eliminare.

Dopo che si aprirà un file, nella parte superiore del file verrà visualizzato lo SHA e il messaggio del commit che si desidera eliminare. Elimina questa riga e salva e esci dal file.

Quando hai fatto questo devi fare una spinta. Quindi digitare il seguente comando.

git push -f origin master 

Dopo aver finito con questo si può vedere che il tuo impegno è stato cancellato.

Problemi correlati