Git-Unterstruktur

8

Angenommen, ich habe das folgende Szenario:

%Vor%

Gibt es einen Git-Befehl, der einen neuen Zweig erstellt, so dass er den Teilbaum nach Zweig X enthält? Ich möchte eine "große Rebase" durchführen, ich möchte, dass die drei WIP-Filialen auf Master referenziert werden.

Ich weiß, dass ich das mit einigen Bash-Skripten machen kann, aber ich würde gerne wissen, wie man das mit einem Git-Befehl macht.

    
cd1 24.01.2013, 14:47
quelle

4 Antworten

11

Es gibt keinen einzigen Git-Befehl dafür. Sie müssen einige manuelle Arbeit erledigen. In Ihrer Situation:

%Vor%

Sie setzen zuerst WIP1 auf Master:

%Vor%

was zu diesem führen wird:

%Vor%

Wenn Sie jetzt git rebase --onto master X WIP2 ausführen, erhalten Sie diese Struktur:

%Vor%

Dies ist wahrscheinlich nicht das, was Sie wollen, also sollten Sie jetzt WIP2 und WIP3 auf B’ :

neubasieren %Vor%

was zu diesem führen wird:

%Vor%     
Chronial 24.01.2013 16:14
quelle
2
%Vor%

Dies sollte ein rebase --onto sein (Sie können ein Beispiel in " Wie verschiebt man bestimmte Commits in einen anderen Zweig in git? "):

%Vor%

Aus Chronial s test , das würde geben:

%Vor%

Also ist die erste Rebase in Ordnung, aber du musst Y SHA bekommen, und:

%Vor%     
VonC 24.01.2013 15:29
quelle
1

Ich habe diese Frage als doppelt gekennzeichnet. Ich werde schreiben, was ich erklärt habe die andere Antwort , aber mit Ihrem Beispiel.

Der Ansatz, den ich für solche Anwendungsfälle verwende, besteht darin, alle Zweige zusammenzuführen in einen gemeinsamen künstlichen -Knoten verschoben werden und dann den Rebase-Befehl verwenden mit der Option --preserve-merges . Wenn Sie alle Zweige zusammenführen, wird 1 angezeigt Endpunkt , der als letzter Eingabeparameter für rebase --onto verwendet wird. Das Startpunkt ist in der Regel offensichtlich, der Ursprung des Teilbaums zu verschieben.

Beim Zusammenführen zum Teilbaumendpunkt sollten Konflikte explizit angegeben werden vermieden werden. Daher müssen die Zusammenführungsbefehle angewiesen werden, sie zu lösen automatisch mit der Option -Xours . Das Zusammenführungsergebnis ist nicht wichtig da diese künstlichen Merge-Knoten nach der Rebase verworfen werden.

Es wird empfohlen, einen neuen Zweig pack zu erstellen, um die Originalreferenzen. Im obigen Beispiel wären die folgenden Befehle durchgeführt:

%Vor%

Unten kann man sehen, was der Baum werden würde. Zwei neue künstliche Knoten p2 und pack wurden mit den Zusammenführungen erstellt.

%Vor%

Jetzt ist es Zeit für eine Rebase. Seit jetzt gibt es einen gemeinsamen Endpunkt für alle Zweige ( pack ), ist es einfach, den gesamten Teilbaum mit:

zu verschieben %Vor%

Was das bewirkt:

%Vor%

Jetzt ist es an der Zeit, die Referenzen neu anzuordnen. Ich weiß nicht warum, in einigen Fälle werden die Referenzen verschoben und in anderen nicht. Geben Sie dies für ein jede Referenz WIP1, WIP2, WIP3 oder was immer Sie brauchen:

%Vor%

Und schließlich werden Sie die künstlichen Commits loswerden, für die sie erstellt wurden Erzeugen eines gemeinsamen Teilbaum-Endknotens.

%Vor%

Also wäre der letzte Baum:

%Vor%     
carnicer 24.08.2017 12:13
quelle
0

Wenn Sie dieses Ergebnis haben möchten

%Vor%

Sie sollten das tun:

%Vor%     
elhadi dp ıpɐɥןǝ 24.01.2013 16:09
quelle

Tags und Links