2012-04-02 7 views
16

Sto utilizzando git-rerere per lo scopo previsto, per registrare in modo incrementale le risoluzioni di conflitto tra due rami (principale e un ramo argomento) mentre tali rami si sviluppano, senza creare inutili commit di unione. Tuttavia, anche dopo aver letto la pagina man di git-rerere sono un po 'oscuro quando rerere registra effettivamente la mia risoluzione di conflitto. Il mio flusso di lavoro standard per rilevare e risolvere i nuovi conflitti di unione consiste nel fare git merge master dal ramo dell'argomento, risolvere i conflitti, quindi mettere in scena tutti i file e confermare l'unione con git commit -m "Finished test merge" e quindi annullare l'unione utilizzando git reset --hard HEAD^, lasciando solo le risoluzioni registrate memorizzate di git-rerere.Devo eseguire un'unione per fare in modo che git-rerere registri la risoluzione del conflitto?

Tuttavia, questo sembra un po 'sciocco. Creare un commit e poi annullarlo solo per registrare la risoluzione? Dopo aver letto la manpage per git-rerere, non sono ancora chiaro quando registra le mie risoluzioni. È sufficiente mettere semplicemente in scena i file in conflitto o devo effettivamente creare il commit di merge dopo aver risolto i conflitti, come ho fatto?

risposta

12

Dalla pagina man:

Running the git rerere command immediately after a conflicted automerge 
records the conflicted working tree files, with the usual conflict 
markers <<<<<<<, =======, and >>>>>>> in them. Later, after you are 
done resolving the conflicts, running git rerere again will record the 
resolved state of these files. 

E:

As a convenience measure, git merge automatically invokes git rerere 
upon exiting with a failed automerge and git rerere records the hand 
resolve when it is a new conflict, or reuses the earlier hand resolve 
when it is not. git commit also invokes git rerere when committing a 
merge result. What this means is that you do not have to do anything 
special yourself (besides enabling the rerere.enabled config variable). 

Quindi non c'è bisogno di impegnarsi e annullare il commit. È possibile eseguire semplicemente git rerere senza parametri per registrare il commit.