Come fare il checkout su un file in magit?


16

Diciamo che ho un conflitto di unione. Vedo un file in conflitto come questo:

Unstaged changes:
    Unmerged   Foo/bar/wibble/plop/elbow.txt

Posso premere la scheda qui per aprire le modifiche e forse saltare a un punto all'interno del file per risolvere a mano, ma se si tratta di un file di grandi dimensioni con molti conflitti che può richiedere molto tempo.

Come posso chiedere a git, tramite magit, di verificare la nostra o la loro versione del file, per risolvere il conflitto? Posso copiare il percorso, quindi utilizzare Shift-:per inserire un comando git personalizzato, ma sembra che ci sia una scorciatoia da tastiera per questo. Non riesco a vedere nulla di ovvio nel menu Magit o nel ?pop-up.


3
Anche se questo non risponde direttamente alla tua domanda, ma potrebbe essere utile. Spostare il punto sul file di conflitto magit-statuse premere eper iniziare l'unione a 3 vie ediff. Un'altra alternativa è che in un buffer di conflitto, è possibile attivare l' smerge-modeevidenziazione del conflitto ed eseguire l'unione interattiva direttamente nel buffer (non ediff). Il bind del prefisso per smerge-modei comandi correlati è C-c ^; puoi premere C-c ^ C-hper visualizzare tutte le combinazioni di tasti.
— Tu Do,

Non trovo neanche "nostro" o "loro" nel documento. magit.github.io/master/magit.html#Pushing-and-Pulling
— Ehvince,

1
Sembra una buona domanda per aprire una richiesta di funzionalità?
— Ehvince,

1
buona idea @Ehvince, fatto: github.com/magit/magit/issues/1643
— tenpn

1
Oooh: nella prossima versione di magit puoi kconfliggere e scegliere quale versione conservare. Sembra perfetto! github.com/magit/magit/issues/1643
— tenpn

Risposte:


16

Non sono sicuro quando questa funzione è stata aggiunta, ma lo fa perfettamente:

  1. Unisci un ramo all'altro e incontra un conflitto
  2. Nel buffer Magit, ci saranno sezioni per Merging master, e Unstaged changes, Staged changes. Il file in conflitto è inUnstaged changes
  3. Sulla linea con il file in conflitto, premi kper annullare le modifiche (ovvero le modifiche in conflitto)
  4. Nel minibuffer, vedrai la risposta:

For <conflicted file> checkout: [o]ur stage, [t]heir stage, [c]onflict, or [C-g] to abort


5

Esistono diverse soluzioni:

  • usa smerge-ediff. Nel file con il conflitto, si esegue M-x smerge-ediff. Ti metterà in modalità di risoluzione ediff, con quattro buffer aperti: tuoi, loro, unisci e il buffer dei comandi. Nel buffer dei comandi, si utilizza ne pper passare al blocco successivo o precedente, "a" o "b" per accettare la modifica dal primo o dal secondo buffer, oppure è possibile passare al buffer di unione e modificarlo a proprio piacimento.
  • usa ediff di magit, con enella versione stabile di magit, o M-eo M-m( magit-ediff-resolve) nel prossimo ramo di magit, e poi ti ritroverai per lo più come nel primo caso
  • c'è anche la modalità smerge, C-c ^ ne C-c ^ pti aiuterà a passare da un pezzo a quello precedente o successivo, puoi quindi modificarli o utilizzare C-c ^ oper mantenere la versione 'altra', C-c ^ mper mantenere la versione 'mia', C-c ^ bper mantenere la vecchia versione e C-c ^ aper mantenerli tutti.
  • puoi usare magit-find-file per aprire un file com'era in qualche commit.

Non avevo visto che Tu Do aveva già la maggior parte della risposta che pubblico qui. Sory
— Rémi,

Grazie per l'elenco completo, ma immagino che la risposta a "esiste un modo conciso per ottenere la nostra versione di Thiers" è no. :(
— tenpn
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.