2014-12-13 7 views
6

Ich habe derzeit einen stabilen Master-Zweig und einen Zweig mit vielen großen Änderungen an bestimmten Klassen.Kleine Änderung in Zweig zusammenführen

Während ich den Zweig "changes" verwendete, entdeckte ich einen Fehler, den ich auch auf dem Master-Zweig beheben wollte.

Ich reparierte es, indem ich nur eine Linie des Codes auf dem Master änderte.

Nun möchte ich diesen Hotfix auch auf den Zweig "Änderungen" hinzugefügt haben.

Reading some answers, es wurde vorgeschlagen, dass die beste Option zu Rebase wäre.

Bei der Anwendung git rebase master auf die "Änderungen" Zweig jedoch scheint Git eine der widersprüchlichen Dateien eine völlig andere Datei als zuvor zu betrachten. Mit mergetools --tool diffuse, erhalte ich die folgende Diagnose:

Wie Sie sehen können, gibt es eine Änderung in der ersten Datei, Tonnen von Änderungen in den zweiten und anscheinend keine Überlappung zwischen irgendetwas.

Meine Frage ist: Gibt es eine Möglichkeit, eine kleine Änderung in einen stark veränderten Zweig zu verschmelzen, ohne viel Aufwand in Konfliktlösung zu investieren? Wenn nicht, was ist der beste Weg, um mit dieser Situation umzugehen?

+0

Für One-Line-Änderungen ist Cherry-Picking der Weg zu gehen. –

+0

Für die stark veränderte Teil wird es nur noch schlimmer werden.Wenn die Zeit kommt, könnte es sich lohnen in nachzuschauen Ich habe es nie in Wut selbst benutzt, aber es scheint gut durchdacht und beliebt. – jthill

Antwort

3

Sie können die Cherry-Pick-Methode Benutzer3387542 schlägt vor, es ist ein guter Weg, es zu tun, nur nicht der einzige Weg. Eine andere ist, da der Fehler auch auf dem Master-Zweig existiert, hat die neueste Merge-Basis für die beiden auch.

git checkout $(git merge-base master changes) 
# fix bug at the last branchpoint 
git commit -m 'fix bug #27182' 
git branch bugfix-27182 

git checkout master 
git merge bugfix-27182 

git checkout changes 
git merge bugfix-27182 

# git branch -d bugfix-27182 

Es gibt Nachteile oder so, Sie balancieren commit-Diagramm Unordnung mit klarer Rückverfolgbarkeit (es ist leicht git branch --contains $somecommit zu sagen, um herauszufinden, welche Zweige das Update enthalten, nicht so einfach noch so sicher für gleichwertigen Commits zu sehen, aber eine viel sauberere Geschichte

2

Schauen Sie sich den Befehl git cherry-pick an. Hier mehr Details über sie:

http://git-scm.com/docs/git-cherry-pick

Wir verwenden es häufig, Fehlerbehebung auf andere Zweige zu kopieren, die verschiedenen Versionen. Es ist ein großartiges Feature.