Come eliminare tutte le modifiche apportate a un ramo?


116

Sto lavorando in un ramo (cioè design) e ho apportato una serie di modifiche, ma devo scartarle tutte e ripristinarle in modo che corrispondano alla versione del repository. Pensavo di git checkout designfarlo, ma mi dice solo che sono già nel ramo designe che ho 3 file modificati.

Come potrei eliminare queste modifiche e ottenere il ramo così com'è ora sul server remoto?

Risposte:


207

Nota: NON È POSSIBILE ANNULLARE questo.

Prova git checkout -fquesto eliminerà tutte le modifiche locali che non sono state salvate in TUTTI i rami e il master.


86

git reset --hard può aiutarti se vuoi buttare via tutto dal tuo ultimo commit


6
oppuregit reset --hard HEAD^
deadfish

28
git reset --hard HEAD^dovrebbe essere davvero la risposta accettata. OP non chiedeva informazioni su altri rami ...
vphilipnyc

2
Ho provato questo e penso che abbia cancellato tutto dalla mia ultima spinta, non solo il mio ultimo commit.
Chase Roberts

3
Ho provato git reset --hard HEAD ^ e ha lasciato ancora un mucchio di file non tracciati. Ora su google come rimuoverli con un semplice comando.
John Deighan

20
git diff master > branch.diff
git apply --reverse branch.diff

Questi passaggi possono essere molto utili, se il tuo obiettivo è impostare lo stato di un ramo specifico in modo che sia uguale al ramo principale. Per farlo, eseguilo dall'interno del ramo specifico, quindi elimina il file [nome ramo] .diff quando hai finito di usaregit rm [branch name].diff
karolus

18

Se non si desidera che eventuali cambiamenti designe sicuramente vuole che corrisponde solo ramo di un telecomando, si può anche solo eliminare il ramo e ricrearlo:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
inoltre: git checkout design; git reset - hard origin / design
Dan

Vorrei anche impegnarmi prima di eliminare il ramo
Asarluhi

Se hai commit nel ramo locale che non sono in remoto, questa è una ricetta per entrare in situazioni davvero confuse secondo me. Sicuramente non userò questa soluzione.
erewok

1
@erewok: Beh, la domanda dice specificamente che il richiedente vuole scartare tutte le modifiche.
mipadi

E non credo che questa risposta lo consenta.
erewok

7

@ Will, git immersion è un tutorial git davvero carino e semplice. ti mostrerà come annullare le modifiche per i seguenti casi: unstaged, staged e commit. laboratori 14-18


2
Vorrei solo dire che ora ho fatto git immersion .. più di un anno dopo. OI! Avrei dovuto farlo molto prima ...
Il

1
Questo deve Rubyessere installato ... il che non sembra sempre una scelta
Vishnu

5

Quando vuoi scartare le modifiche nel tuo ramo locale, puoi nasconderle usando il comando git stash.

git stash salva "some_name"

Le modifiche verranno salvate e potrai recuperarle in un secondo momento, se lo desideri, oppure potrai eliminarle. Dopo aver fatto ciò, il tuo ramo non avrà alcun codice non salvato e puoi estrarre il codice più recente dal tuo ramo principale usando git pull.


4

Nella radice di origine: git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes


0

Metodo REVERSIBILE per eliminare tutte le modifiche:

Ho trovato questa domanda dopo aver creato un'unione e aver dimenticato di controllare lo sviluppo subito dopo. Hai indovinato: ho iniziato a modificare alcuni file direttamente sul master . D'oh! Dato che la mia situazione non è affatto unica (l'abbiamo fatto tutti, no; ->), offrirò un modo reversibile che ho usato per scartare tutte le modifiche per far sì che il master assomigli di nuovo allo sviluppo .

Dopo aver fatto un git diffper vedere quali file sono stati modificati e valutare la portata del mio errore, ho eseguito:

git stash
git stash clear

Dopo aver prima nascosto tutte le modifiche, sono state successivamente cancellate. Tutte le modifiche apportate ai file in errore al master sono state eliminate e la parità è stata ripristinata.

Diciamo che ora volevo ripristinare quelle modifiche. Posso farlo. Il primo passo è trovare l'hash della scorta che ho appena cancellato / lasciato cadere:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Dopo aver appreso l'hash, ho ripristinato con successo le modifiche non salvate con:

git stash apply hash-of-cleared-stash

Non volevo davvero ripristinare quelle modifiche, volevo solo confermare che potevo ripristinarle, quindi le ho cancellate di nuovo.

Un'altra opzione è applicare la scorta a un ramo diverso , piuttosto che cancellare le modifiche. Quindi, in termini di cancellazione delle modifiche apportate lavorando sul ramo sbagliato, stashti dà molta flessibilità per recuperare dal tuo boo-boo.

Comunque, se vuoi un mezzo reversibile per cancellare le modifiche a un ramo, quanto sopra è un modo meno pericoloso in questo caso d'uso.


-1

git checkout -f

Questo è sufficiente per la tua domanda. L'unica cosa è che, una volta fatto, è fatto. Non c'è annullamento.

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.