Come annullare una fusione git con conflitti


785

Sono sul ramo mybranch1. mybranch2viene biforcuta mybranch1e sono state apportate modifiche mybranch2.

Poi, mentre mybranch1sono attivo, l'ho fatto. git merge --no-commit mybranch2 Mostra che c'erano dei conflitti durante la fusione.

Ora voglio scartare tutto (il mergecomando) in modo che mybranch1sia tornato a quello che era prima. Non ho idea di come posso procedere.


Risposte:


1355

Git più recente:

git merge --abort

Questo tenta di ripristinare la copia di lavoro allo stato in cui si trovava prima dell'unione. Ciò significa che dovrebbe ripristinare tutte le modifiche non confermate prima della fusione, sebbene non possa sempre farlo in modo affidabile. In generale, non dovresti comunque unirti a modifiche senza commit.

Prima della versione 1.7.4:

git reset --merge

Questa è una sintassi precedente ma fa lo stesso di quanto sopra.

Prima della versione 1.6.2:

git reset --hard

che rimuove tutte le modifiche non impegnate, inclusa l'unione non impegnata. A volte questo comportamento è utile anche nelle versioni più recenti di Git che supportano i comandi precedenti.


1
Ma per le versioni precedenti di git questo è il modo di usare
Anshul

7
A volte è ancora necessario utilizzare git reset --mergeanche nelle versioni più recenti. Ho avuto un git merge --aborterrore (senza apportare modifiche) in cui git reset --mergeriesce (e fa la cosa giusta) in git 2.2.1.
Theodore Murdock,

Ho scoperto che dovevo fare git merge --abortseguito da git reset --mergequando ho avuto il conflitto automerge dallo scoppiare la mia scorta.
Chef Faraone

1
di solito git merge --abortfunziona per me, tuttavia mi sono trovato in una situazione in cui ho verificato in uno stato HEAD distaccato e uno dei miei file aveva uno stato "entrambi modificati". Volevo scartare tutto e tornare in un ramo, dovevo git reset --hard, git merge --abortmi disse che non c'era alcuna unione da interrompere, (MERGE_HEAD mancante).
yano,

A volte git merge --abortnon è in grado di riportarti al tuo stato precedente, e in quel caso la "sintassi più vecchia" git reset --hardfa il trucco.
Kevin Stewart,

130

In realtà, vale la pena notare che git merge --abortè solo equivalente a git reset --mergedato che MERGE_HEADè presente. Questo può essere letto nella guida di git per il comando merge.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

Dopo una fusione fallita, quando non c'è MERGE_HEAD, la fusione fallita può essere annullata git reset --mergema non necessariamente con git merge --abort, quindi non sono solo vecchia e nuova sintassi per la stessa cosa .

Personalmente trovo git reset --mergemolto più utile nel lavoro quotidiano.


2
Grazie, questa informazione è stata molto utile. Ho avuto un'unione che è iniziata con git stash applyun ramo sbagliato e git merge --abortnon ho fatto nulla (no MERGE_HEAD), mentre ha git reset --mergefatto il trucco.
geomaster,

4
Ho visto circa 10 persone dire che git merge --abortè il nuovo comando per git reset --mergee ho riscontrato lo stesso problema di @geomaster, questo è stato di grande aiuto, grazie!
Tom,

106

Supponendo che tu stia utilizzando l'ultimo git,

git merge --abort

Ok questo non funziona con 1.7.0.7 :(. Devo usare reset --hard con esso
Anshul

5

Ci sono due cose che puoi fare prima di annullare l'unione per comando

git merge --abort

o

puoi passare temporaneamente al tuo stato di commit precedente tramite comando

git checkout 0d1d7fc32 

0

Sorgenti

Se non esegui il commit della tua unione, fai semplicemente doppio clic su un altro ramo (= checkout) e quando sourcetree ti chiede di annullare tutte le modifiche, accetta

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.