Sourcetree: annulla i commit non compressi


208

Sto usando Sourcetree per Windows per un repository git e vorrei annullare un commit non spremuto.

È possibile? Se faccio "ripristina commit", crea un secondo commit che ripristina il primo commit, ma non voglio che il primo commit appaia affatto nel mio controllo del codice sorgente.

Potrei anche cancellare il mio repository locale e tirarlo di nuovo senza il mio commit locale, ma forse c'è un altro modo?


Ho scritto un articolo dettagliato con schermate. Condividere nella speranza che possa aiutare: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

Risposte:


345
  1. Fai clic con il pulsante destro del mouse sul commit che desideri ripristinare (non quello che desideri eliminare!)
  2. Seleziona "Ripristina master su questo commit"
  3. Seleziona "Soft" reset.

Un ripristino software manterrà le modifiche locali.

Fonte: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

modificare

Informazioni git revert: questo comando crea un nuovo commit che annullerà altri commit. Ad esempio, se hai un commit che aggiunge un nuovo file,git revert potrebbe essere utilizzato per eseguire un commit che eliminerà il nuovo file.

Informazioni sull'applicazione di un ripristino software: si supponga di disporre dei commit Aper E( A---B---C---D---E) e che si desideri eliminare l'ultimo commit ( E). Quindi è possibile eseguire un ripristino software per eseguire il commit D. Con un soft reset il commit Everrà cancellato da git ma le modifiche locali verranno mantenute. Ci sono altri esempi nella documentazione di reset di git .


34
O se stai lavorando su un ramo - "Ripristina il ramo corrente su questo commit"
Tom Auger

5
Non capisco molto queste spiegazioni dell'interfaccia utente ... Ripristina il ramo corrente su questo commit così tanto che non suona come se eliminasse il commit. E alla fine ha fatto quello che ti aspetteresti di più. Ripristina la mia copia di lavoro sul commit, invece di eliminarla.
MrFox,

Sono d'accordo con @MrFox. Dopo averlo fatto, il commit che non voglio viene ancora mostrato nella struttura.
Timmmm,

@Timmmm: la nuova spiegazione aiuta?
nightlyop

In realtà mi sono reso conto che avevo già spinto il mio impegno su Github. Ho trovato un articolo che spiega come "riscrivere la storia" ma sembra che sia più un problema di quanto valga la pena!
Timmmm,

46

Se si seleziona la voce di registro in cui si desidera ripristinare, è possibile fare clic su "Ripristina a questo commit". Utilizzare questa opzione solo se non è stato eseguito il push delle modifiche inviate al commit. Se sei preoccupato di perdere le modifiche, puoi utilizzare la modalità software che lascerà una serie di modifiche non impegnate (cosa hai appena cambiato). L'uso del misto reimposta la copia di lavoro ma mantiene tali modifiche e un duro eliminerà completamente le modifiche. Ecco alcuni screenshot:

inserisci qui la descrizione dell'immagine


3
Se vedi ancora un'icona che mostra un Push è disponibile dal tuo precedente commit (che hai appena cancellato), pull e Sourcetree sembra aggiornare l'interfaccia utente.
ChristoKiwi l'

6

Se si desidera eliminare un commit, è possibile farlo come parte di un rebase interattivo. Ma fallo con cautela, così non finirai per rovinare il tuo repository.

In Sourcetree:

  1. Fai clic con il pulsante destro del mouse su un commit più vecchio di quello che desideri eliminare e scegli " Rebase figlio di xxxx in modo interattivo ... ". Quello su cui fai clic sarà la tua "base" e potrai apportare modifiche a ogni commit fatto dopo quello.
  2. Nella nuova finestra, selezionare il commit che si desidera eliminare e premere il pulsante " Elimina " in basso, oppure fare clic con il pulsante destro del mouse sul commit e fare clic su " Elimina commit ".
  3. Fare clic su " OK " (o " Annulla " se si desidera interrompere).

Dai un'occhiata a questo post sul blog di Atlassian per ulteriori informazioni sul rebasing interattivo in Sourcetree.


Questa è la risposta che stavo cercando, ha funzionato esattamente come necessario.
Cliff Burton,

0

Se ci si trova su un altro ramo, è necessario prima "controllare questo commit" per il commit che si desidera eliminare, e solo allora "reimpostare il ramo corrente su questo commit" scegliendo il precedente wright commit funzionerà.

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.