2016-05-14 1 views
1

Ich habe eine Niederlassung in Git, die sauber auf Master anwenden würde. Es enthält einen Commit mit 10 Funktionen, die sauber auf Master anwenden würde. Aber ich möchte die Änderungen in Master-Funktionen zusammenführen. Die Änderungen an den Features sind nicht auf Dateiebene (daher kann eine Änderungsdatei Änderungen für zwei bis drei Funktionen enthalten, sie können jedoch leicht getrennt werden). Aber jede Merge-Strategie für den gesamten Dateiinhalt schlägt daher fehl, es wären eher die Merge-Zeilen 10-20 aus der Datei 1 und die Zeilen 70-80 aus der Datei und die Zeilen 100 aus der Datei 3 für ein Feature. Gibt es irgendeine Art von Editor, derMerge große Git-Commit durch Aufteilen in kleine Commits auf Master-Zweig

  • erlauben würde mir die Zeilen in der riesigen begehen
  • erlauben zu holen mich die aufgenommenen Linien in einem kleinen verschmelzen zu Master begehen

-> in das Ende wäre es "eine große commit auf einem Zweig" in 10 commits auf Master umgewandelt, Feature nach Merkmal

Gibt es ein Tool (Kette), die einen solchen Workflow visuell unterstützen würde?

+1

Mögliche Duplikat [Break a previous in mehrere Commits begehen] (http://stackoverflow.com/questions/6217156/ break-a-previous-commit-in-multiple-commits) –

+0

das scheint alles sehr klobig zu sein. Der Workflow wäre eher wie fire up etwas wie kdiff3, wählen Sie erste Reihe von Änderungen, commit, run kdiff3 (jetzt weniger Änderungen, wählen Satz von Änderungen, commit, und so weiter ... – Mandragor

Antwort

2

Da die Arbeit, die Sie Stück für Stück in master fusionieren möchte ist in einer auf nicht masterall-in-one Zweig begehen, möchte ich zunächst die all-in-one begehen Zerschlagung empfehlen, dann einer nach dem anderen Zusammenführung kleiner in master begehen. Auf diese Weise kann Ihr Git-Verlauf im Gegensatz zum Zusammenführen in einem Patch verfolgen, woher die Änderungen stammen.

Es gibt mehrere Möglichkeiten, dies zu erreichen. Eine Möglichkeit wäre, eine zweite piecemeal Verzweigung von master vom selben Startpunkt wie Ihre all-in-one Verzweigung zu erstellen, die all-in-one in die piecemeal Verzweigung ohne Commit einzufügen, abgestufte Änderungen zu deaktivieren und dann die nicht gespeicherte Arbeit in kleinere Commits unter piecemeal aufzuteilen.

Um ungeschützte Arbeit in mehrere Commits mit visueller Unterstützung zu zerlegen, können Sie mit git add --patch . jede aktuelle nicht markierte 'Hunk' von Code in den Git-Index in der Konsole (oder nicht).

git gui bietet eine grafische Möglichkeit, das gleiche zu tun: Wählen Sie nicht-Datei, klicken Sie mit der rechten Maustaste auf den Abschnitt der Datei, klicken Sie Stage Hunk For Commit. Weitere Informationen zu den einzelnen Bühnenbildern finden Sie unter http://www.adamfranco.com/2009/01/13/git-tip-of-the-day-stage-hunks/.

+1

das Commit auf einem Dev-Zweig ist bereits passiert Ich könnte natürlich einen Patch aus dem Zweig erstellen, den Patch auf Master anwenden (sauber) und dann diese Methode verwenden .... fühlt sich nicht wie ein "natürlicher" Git-Workflow an ... hmm – Mandragor

+0

Entschuldigung, dass Sie das vermisst haben Ich werde meine Antwort revidieren. Ihre Idee ist wahrscheinlich der idiomatische Weg, um Ihr Ziel in Git zu erreichen. –

+0

Tatsächlich kann der Patch-Ansatz wahrscheinlich verbessert werden.Ich habe in meiner aktualisierten Antwort einen Weg beschrieben, dies zu tun. –

0

Angenommen, der Zweig ist wie -A-B und Sie möchten B in mehrere Commits aufteilen.

git reset A 
git add some_file -p 
git commit 
git add some_file -p 
git commit 
... 

Referenz: git-add einen Blick auf den Teil Bearbeiten von Patches und haben einen Versuch

+0

Das Problem bei diesem Ansatz ist, dass Sie "im Kopf" verfolgen müssen, welche einzelnen Patches (in mehreren Dateien) zu einem Feature gehören. Dies ist vielleicht eine Lösung für einen intellektuellen Master Mind;) aber für das tägliche Geschäft würde ich die hier vorgeschlagene git gui Lösung bevorzugen, wo ich tatsächlich über mehrere Dateien browsen und meinen commit schreiben könnte ... – Mandragor

+0

Hmm ... Vielleicht ersetzen @ ElpieKay's git add some_file -p mit 'git gui', um zu bekommen, was Sie wollen, @Mandragor? –

+0

Stimmen Sie mit Mandragor und Mark überein. Die bessere Lösung ist, Commit so oft wie möglich zu übertragen. Schließlich ist es einfacher, mehrere Commits zu einer zu komponieren, als eine in mehrere zu teilen. – ElpieKay