Interrompi un'unione Git


119

Sto lavorando a un progetto che utilizza Git come VCS. Ho un ramo xyztagliato dal ramo principale del master. Dopo aver lavorato per un po ', ho eseguito il commit del mio codice e ho eseguito un pull della mainline del ramo.

Il tiro andava bene. Ho quindi unito il codice con master. Dopo l'unione, c'erano problemi in alcuni file. Non ho eseguito il commit del codice dopo l'unione. Qualcuno può dirmi come posso interrompere questa unione e portare il mio ramo in cui sto lavorando attualmente allo stato in cui era prima che lo fondessi?



Non puoi semplicemente ripristinare il commit precedente del ramo?
Wutipong Wongsakuldej


1
Nota che in Git, revertè il nome di un comando che crea un nuovo commit ripristinando le modifiche in un commit precedente, quindi probabilmente non è la parola che stai cercando qui. Ho modificato la tua domanda per chiarire.
Scott Weldon

Risposte:


298

fintanto che non hai eseguito il commit puoi digitare

git merge --abort

proprio come suggerito dalla riga di comando.


4
Ho ricevuto questo messaggio durante il tentativo: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs

1
@Ahmad git non avvia un'unione con modifiche non salvate (di file già tracciati) in atto. git non può proteggere ciò che non sa.
Timothy Truckle

sì, l'ho imparato perdendo il mio codice. ecco i dettagli del mio problema, come sono caduto nel problema. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad

23

Se fai "git status" mentre hai un conflitto di unione, la prima cosa che git ti mostra è come interrompere l'unione.

output di git status durante un conflitto di unione


Bene, questo mi ha suggerito di git reset HEAD <file>rimuovere in modo efficace il "merge" comprimibile dal controllo sorgente dell'estensione git => quindi potrei risolvere i conflitti o semplicemente ripristinare le mie modifiche nell'elenco delle estensioni GIT :)
jave.web

6

A dire il vero, ci sono molte, molte risorse che spiegano come farlo già sul web:

Git: come eseguire l'unione inversa di un commit?

Git: come eseguire l'unione inversa di un commit?

Annullamento delle fusioni , dal blog di Git (recuperato dalla Wayback Machine di archive.org)

Quindi immagino che riassumerò solo alcuni di questi:

  1. git revert <merge commit hash>
    Questo crea un ulteriore commit di "ripristino" che dice che hai annullato una fusione

  2. git reset --hard <commit hash *before* the merge>
    Questo ripristina la cronologia prima di eseguire l'unione. Se hai commit dopo l'unione, dovrai cherry-pickinserirli in seguito.

Ma onestamente questa guida qui è migliore di qualsiasi cosa io possa spiegare, con i diagrammi! :)


1
Il collegamento è andato. Sospiro.
SMBiggs

@ScottBiggs Penso che lo abbiano spostato su git-scm.com/book/en/v2/… . Denis, se leggi questo, puoi controllare? E se è davvero lo stesso, puoi aggiornare il link nella tua risposta? Grazie!
Fabio dice Reinstate Monica
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.