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.