Wie benutze ich git rebase, um eine verworrene Geschichte zu bereinigen?

8

Nachdem ich mehrere Wochen mit einem halben Dutzend verschiedener Zweige und Merges gearbeitet habe, sowohl auf meinem Laptop als auch auf meinem Schreibtisch und zu Hause, ist meine Geschichte ein bisschen verwickelt. Zum Beispiel habe ich gerade einen Fetch gemacht, dann Master mit Ursprung / Master zusammengeführt. Nun, wenn ich Show-Zweige git, sieht die Ausgabe so aus:

%Vor%

Ich möchte das mit einer git-Rebase aufräumen. Ich habe zu diesem Zweck einen neuen Zweig erstellt, den Rebasemaster, und in diesem Zweig habe ich git rebase & lt; common-ancestor & gt; Allerdings muss ich viele Konflikte lösen, und das Endergebnis auf dem Zweig rebase-master stimmt nicht mehr mit der entsprechenden Version auf master überein, die bereits getestet wurde und funktioniert!

Ich dachte, ich hätte irgendwo eine Lösung gesehen, aber ich kann sie nicht mehr finden. Weiß jemand, wie man das macht? Oder werden diese verschachtelten Ref-Namen verschwinden, wenn ich anfange, nicht benötigte Zweige zu löschen, mit denen ich bereits verschmolzen bin?

Ich bin der einzige Entwickler bei diesem Projekt, also wird es niemanden geben, der davon betroffen sein wird.

    
Lawrence I. Siden 11.06.2010, 21:00
quelle

2 Antworten

10

Der beste Weg, um eine verworrene Geschichte aufzuräumen, ist, die Geschichte linear zu halten. Sie tun dies, indem Sie jede Art von Zusammenführung außer Schnellvorlauf vermeiden.

Der Arbeitsablauf läuft so ab.

%Vor%

Wenn es Zeit ist, den Zweig in den Master zu integrieren, füge ihn nicht zusammen. Richten Sie stattdessen diesen Zweig gegen den Master neu. Das wird den Ast nicht mehr wie einen Ast aussehen lassen, sondern einfach mehr Wachstum an der Spitze des Baumes. Sie lösen etwaige Zusammenführungskonflikte während der Rebase auf.

%Vor%

Fügen Sie nun den Zweig in den Master ein. Dies wird eine Schnellvorlauf-Zusammenführung sein.

%Vor%

Und jetzt schieben Sie die Arbeit upstream.

%Vor%     
Wayne Conrad 10.07.2010 18:02
quelle
5

Der normale Prozess, für Repos, wo Sie einen Zweig drücken können (Ersetzen des Remote-Verlaufs durch einen neuen, der lokal von einem Rebase erstellt wurde), ist zu tun:

%Vor%

Aber das ist wiederum nur dann gültig, wenn Sie als einziger aus Ihren Repos ziehen, und selbst dann müssen Sie einige Ihrer lokalen Zweige neu initialisieren, um die neuen Remotespeicher neu zu schreiben.

Von der Rebasesitzung können Sie Git beschneiden und Geschichte quetschen , um die Art von Geschichte zu bekommen, die Sie brauchen.

    
VonC 11.06.2010 21:35
quelle

Tags und Links