2017-02-03 4 views
0

Wir verwenden Zweige für Features, die wir dann in master zusammenführen. Wir verwenden auch Zweige für Versionen. Allerdings habe ich eine bestimmte Funktion (in master zusammengeführt), die in den Versionszweig gehen muss. Zuvor verwendete ich dafür cherry-pick (manuelles Zupfen von Commits einzeln), aber dieses Feature hat zu viele Commits, um eins nach dem anderen zu tun. Gibt es einen besseren Weg?Features in Git in einem anderen Zweig zusammenführen?

Diese Funktion wurde bereits in master zusammengeführt. Der Zweig existiert nicht mehr lokal. Allerdings habe ich die Verpflichtung, die aus der Zusammenführung in master resultierte.

Ich kann feature-branch wiederherstellen (seit wir GitHub verwenden). Wenn ich jedochaus dem Versionszweig ausführe, erhalte ich alle Arten von Konflikten, die nichts mit dem Feature zu tun haben. Dasselbe passiert, wenn ich git rebase feature-branch (von der version-branch) mache.

+0

Wird dies in Master zusammengeführt und auf Remote verschoben oder ist es alles lokal? – castis

+0

Siehe mein Update @castis –

Antwort

1

Ihre Geschichte könnte wie folgt aussehen:

*--*--X--Y---------------* [master] 
    \  \   /
    \  *--*--*--*--A [formerly feature-branch] 
     \ 
     *--*--* [version-branch] 

Der einfache Teil feature-branch zurück erhält; nur der Hash A begehen herauszufinden und zu tun:

git checkout -b feature-branch A 

Wenn jedoch version-branch abgezweigt von mastervorfeature-branch hat (wie oben dargestellt), Sie wollen nicht eine gerade git merge oder git rebase zu tun, denn das wird auch commits X und Y bringen. Stattdessen tut ein --onto Fütterungsmaterial:

git rebase --onto version-branch Y feature-branch 

Um es einfacher zu machen Y zu finden, können Sie tun:

git merge-base master feature-branch 

Oder alles in einem Befehl:

git rebase --onto version-branch $(git merge-base master feature-branch) feature-branch 

Nach dem Fütterungsmaterial ist abgeschlossen, können Sie wie gewohnt in version-branch zusammenführen.


Wenn Sie erhalten jede Konflikte während der Fütterungsmaterial verschmelzen (oder wenn version-branch abgezweigt master bei oder nach feature-branch haben, und Sie sind immer noch Konflikte immer), dann werden Sie mit ihnen zu tun haben, denn das ist die Konflikte bedeutet, sind zwischen den commits in feature-branch und die commits in version-branch.

+0

Kannst du auch 'git cherry-pick -m 1 ' wo 'MC' ist das merge-commit, das' feature-branch' auf 'master' bringt? – frans

+0

@Frans: Ich bin nicht sicher von der Spitze meines Kopfes, aber es konnte nicht schaden, es zu versuchen. –

0

Sie erhalten die Zusammenführungskonflikte in Ihrem Versionszweig, da der Funktionszweig auf dem Master basiert und der (ältere) Versionszweig einen anderen Verlauf hat (kirschmarkierte Commits, Merges usw.). In Ihrem aktuellen Feature-Zweig gibt es zusätzliche Commits von anderen nicht zusammengeführten Features, wenn es auf Master basiert. Also erwarte ich, dass es viel harte Konfliktlösungsarbeit geben wird.

Ich denke, Sie können nicht sogar Rebase. Wenn Sie den Versionszweig an die Basis des Feature-Zweigs referenzieren, werden die ausgewählten Zusammenführungen und alten gelösten Konflikte Ihres Versionszweigs erneut angewendet und führen zu neuen Konflikten.

Also meiner Meinung nach ist Ihr Prozess falsch.Wenn Sie neue Features auf ältere Versionen anwenden möchten, muss der Feature-Zweig auf dem ältesten Versionszweig basieren. Andernfalls können Sie den Code in Ihrem neuen Feature ändern, das nie Teil der alten Version war, da es nur zum Master verschmolzen wurde.

Ich empfehle, verschiedene Repositories für die Versionen (Gabeln) zu erstellen und keine Verzweigungen für die Versionierung zu verwenden. Es macht es einfacher zu pflegen. Um das Feature auf eine andere Version anzuwenden, klicken Sie nach Abschluss der Implementierung auf das Zielversionsrepository in einem Feature-Zweig. Dann können Sie die notwendigen Änderungen im Code vornehmen, Konflikte lösen usw. und diese mit dem Master Ihres Versions-Repos zusammenführen.

Hoffnung, das hilft.

Verwandte Themen