2012-04-02 6 views
16

Ich verwende git-rerere für den beabsichtigten Zweck, um Konfliktlösungen zwischen zwei Verzweigungen (Master und eine Zweigstelle) inkrementell aufzuzeichnen, wie diese Zweige entwickeln, ohne unnötige Merge-Commits zu erstellen. Aber selbst nachdem ich die git-rerere-Manpage gelesen habe, bin ich ein wenig unklar, wann Rerere tatsächlich meine Konfliktlösung aufzeichnet. Mein Standardworkflow zum Erkennen und Beheben neuer Merge-Konflikte besteht darin, git merge master aus dem Zweig zu tun, die Konflikte aufzulösen, dann alle Dateien zu staffeln und die Zusammenführung mit git commit -m "Finished test merge" zu committen und dann die Zusammenführung unter Verwendung von git reset --hard HEAD^ rückgängig zu machen von git-rerere.Muss ich eine Zusammenführung begehen, damit git-rerere meine Konfliktlösung aufzeichnet?

Allerdings scheint das ein bisschen albern. Einen Commit erstellen und ihn dann rückgängig machen, nur um die Auflösung aufzuzeichnen? Nach dem Lesen der Manpage für git-rerere, bin ich immer noch nicht wirklich klar, wenn es meine Auflösungen aufzeichnet. Reicht es aus, nur die konfliktbehafteten Dateien zu staffeln oder muss ich das Merge-Commit tatsächlich erstellen, nachdem ich die Konflikte gelöst habe, so wie ich es gemacht habe?

Antwort

12

Vom manpage:

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. 

Und:

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). 

So müssen Sie nicht begehen und das Commit rückgängig gemacht werden. Sie können einfach git rerere ohne Parameter ausführen, um das Commit aufzuzeichnen.