2010-03-30 9 views
5

Ich muss häufig zwischen Dev und Master zusammenführen.Git-Strategie, um eine Reihe von Commits auf einen bestimmten Zweig beschränkt haben

Ich habe auch eine Festschreibung, die ich nur für Dev anwenden muss, um Dinge lokal zu arbeiten.

Früher habe ich nur von Dev zu Master zusammengeführt, also hatte ich einen Zweig production_changes, der das "Rückgängig-Commit" des Dev-Commits enthielt. und vom Meister habe ich das zusammengeführt. Verwendet, um gut zu funktionieren.

Jetzt jedes Mal, wenn ich von dev verschmelzen zu beherrschen und vice versa, ich habe auf cherry-pick und gelten die gleichen begehen immer wieder :(. Häßlich ist.

Welche Strategie kann ich anpassen, so dass ich kann zwischen zwei Filialen nahtlos ineinander übergehen, aber nur auf einem dieses Zweig einige der Änderungen behalten?

Antwort

1

ich würde eine merge driver (in einer Zusammenführung Direktive innerhalb einer .gitattributes Datei deklarierte Skripte) empfehlen, um bestimmte Dateien zu verhindern von einem bestimmten Commit betroffen sein
(zum Beispiel, wenn bestimmte Dateien mu st nicht geändert werden, wäre dieser Treiber so einfach wie ein "keep mine" merge. Das hat zu merge only specific directories mit gutem Beispiel verwendet wurde oder zu verfolgen, wie config files are managed pro Zweig)

DAS OP ergänzt:.

Aber ich bin auf der Suche mehr für eine clevere Lösung, wenn ein solches vorhanden ist, wie „erstellen Zweig, der die Undo hat begehen nur und wenden es es eine Fälschung zu meistern, auf dev“

Clevere Lösung ...
Nun, ich git rerere (Wiederverwendung aufgezeichnet Auflösung von Konflikt merge schlagen kann: wenn Sie verschmelzen dev einen Konflikt auslösen, und wenn die Auflösung Wenn Sie diesen Zusammenbruch effektiv aufheben, können Sie diese Auflösung aufzeichnen, um sie bei der nächsten Zusammenführung automatisch zu wiederholen.

Weitere Informationen finden Sie in diesem Befehl unter Rerere Your Boat... unter Scott Chacon.

+0

Sollte funktionieren, aber ich suche mehr nach einer cleveren Lösung, wenn eine existiert, wie "erstellen Sie eine Zweigstelle, die das Rückgängigmachen nur commit und es auf Master anwenden, fake es auf dev" –

+0

@becomingGuru: gerade meine Antwort abgeschlossen mit 'git rerere' falls es helfen könnte. – VonC

0

Ich würde dies mit einer lokalen Verzweigung machen (d. H. Die nie irgendwohin geschoben wurde) in der Dev-Repo, die ich immer an den Anfang des Dev-Zweigs zurückbette, wenn ich vom Master abhinge. Es ist nicht ganz nahtlos, aber ich denke, es ist ein bisschen besser als Rosinenpicken.

+0

Auch wenn Sie zum letzten Master einige Zeit rebasen, müssen Sie den Master zusammenführen, wenn dieses Commit eingeht. –

1

Lie to git: Machen Sie das Diff in einem separaten Zweig, der am Verzweigungspunkt Ihres Dev-Zweigs verankert ist. Dann „merge“ es in Master ohne wirklich zu ändern Meister: so etwas wie git merge -s ours devfix-branch (Sie tun dies auf master)

dann zu dev zurückgehen und verschmelzen normalerweise: git merge devfix-branch. Jetzt werden sowohl dev als auch master annehmen, dass sie bereits das devfix haben, und Sie können weiterhin mit dem Master zusammenführen.

Es ist eine Übung für den Leser, um zu sehen, ob dies tatsächlich funktioniert, oder kann zur Arbeit gemacht werden.

+0

Super! Vielen Dank! Das nächste Mal, wenn ich so etwas machen möchte, werde ich das verwenden. Für den Moment habe ich es gelöst, indem Sie einige ungeprüfte Dateien verwenden, um die Änderungen zu übernehmen, so dass die Zusammenführung nahtlos ist! –

Verwandte Themen