Die Zusammenführung in Git rückgängig machen, so dass keine Commits vom anderen Zweig existieren

8

Ich habe zwei Zweige: Entwicklung und bug_fixes . Ich habe versehentlich den Zweig Entwicklung in bug_fixes zusammengeführt vor zwei bis drei Wochen und arbeite seitdem an bug_fixes , und ich habe die Änderungen in bug_fixes verschoben.

Nun muss ich den Zweig Entwicklung aufheben. Ich möchte eine reine bug_fixes Zweigstelle ohne commits-Formular Entwicklung Zweig. Durch Googlen habe ich folgende Szenarien entwickelt:

1) Stellen Sie das Commit wieder her, das den Zweig Entwicklung im Zweig bug_fixes zusammengeführt hat, aber es hat die Aufgabe teilweise erledigt. Die Commits vom Zweig Entwicklung können weiterhin im Zweig bug_fixes angezeigt werden, was nicht erforderlich ist.

2) Rebase und löschen Sie das Commit, das die Zusammenführung durchgeführt hat, aber es hat immer noch das gleiche Problem wie in Punkt 1 beschrieben. bug_fixes Zweig enthält immer noch die Commits von Entwicklung Zweig.

Gibt es eine Möglichkeit, das Zusammenführungs-Commit zu löschen, und all diese Commits, die im Zweig bug_fixes der Zweigstelle Entwicklung eingehen, werden ebenfalls gelöscht? Oder ist es nicht möglich?

    
Arslan Ali 10.04.2016, 16:40
quelle

4 Antworten

5

WENN Sie wissen, welche Commits vom Entwicklungszweig kommen (zusätzlich zum Merge-Commit), können Sie ein git rebase -i (interaktives Rebase) aus dem letzten guten Commit von Bugfixes:

%Vor%

Die komplexere Alternative wäre ein git filter-branch , aber hoffentlich reicht das interaktive Rebase.

Im OP steht Fall , war der vollständige Befehl:

%Vor%

-p ermöglicht das Beibehalten des Merge-Commits.

    
VonC 12.04.2016, 19:18
quelle
4

Ich würde den folgenden Ansatz versuchen:

Erstellen Sie zunächst eine Liste der Commits in beiden Zweigen:

%Vor%

Zweitens identifizieren Sie in jedem Zweig die ID des letzten Commits, bevor Sie die Zusammenführung ausführen. Nennen wir diese Commits devel-0 und bugfixing-0 Dann bringen Sie Ihre Zweige in den Status vor dem zufälligen Zusammenführen:

%Vor%

An dieser Stelle haben Sie zwei saubere, aber veraltete Git-Zweige. Nun sollten Sie von log-devel.txt und log-bugfixing.txt alle Commits nehmen, die nicht in den aktuellen Zweigen enthalten sind, und sie zum entsprechenden Zweig hinzufügen. Um ein Commit mit der ID abc0123 zu Ihrem Zweig development hinzuzufügen, können Sie cherry pick verwenden :

%Vor%

Berücksichtigen Sie, dass die Commits besser zu den sauberen Zweigen in der gleichen Reihenfolge hinzugefügt werden sollten, in der sie dem Fehlerbehebungszweig hinzugefügt wurden, um die Anzahl der auftretenden Konflikte zu minimieren.

    
Bustikiller 16.04.2016 10:43
quelle
1

Sie müssen Ihre letzte Commit-Nachricht für bug_fixes vor merge wissen, wenn Sie den sha-Hash dann besser kennen.

Jetzt müssen Sie zuerst den sha Hash mit dem Befehl

finden
  

$ git reflog

Die Ausgabe ist etwas wie

  

1fb5738 KOPF @ {10}: commit ...

     

4d47df6 KOPF @ {11}: commit ...

     

5f32c4b HEAD @ {12}: Zusammenführen ...

     

428f91d HEAD @ {13}: Kasse ...

     

5f32c4b HEAD @ {14}: Kasse ...

Der erste Teil ist der sha-Hash. In diesem Fall hat der Status vor dem Zusammenführen den Hashwert 428f91d

Nun werden wir im bug_fixes Zweig auf diesen Hashwert

zurückgesetzt
  

git reset --hard 428f91d

jetzt wird es rückgängig gemacht

    
krazedkrish 18.04.2016 06:05
quelle
0

Lassen Sie mich das Szenario mit einem Beispiel unten beschreiben

Fehlerbehebungszweig: Revision 10

Zusammengefasster Dev-Zweig: Revision 11

Mehrfache Änderungen nach der Zusammenführung: Revision 12 - Revision 15

-

Jetzt gibt es 2 Schritte, die erledigt werden müssen (Einfache Methode ohne native native Befehle)

  1. Gehen Sie zurück zu Revision 10

    Klonen Sie den neuesten Code in einen Ordner mit dem Namen "neuste"

    Klonen Sie Revision 10 in einen Ordner namens "rev10"

    Entfernen Sie den gesamten Inhalt (außer .git-Ordner) vom letzten Ordner

    Kopieren Sie den gesamten Inhalt (außer .git-Ordner) vom Ordner rev10 zum neuesten Ordner

    Überprüfen des letzten Ordnerinhalts

Jetzt wird der Bug-Korrektur-Zweig den Inhalt der Revision 10 ohne Änderungen der Entwickler-Verzweigung haben

  1. Optional - Zusammenführen von Revision 12 - Revision 15 in den Zweig bug_fix

    Da wir zur alten Revision zurückgekehrt sind, ist die letzte Verpflichtung zum Bugfix-Zweig ebenfalls weg Diese Revisionen müssen manuell nacheinander in den Bugfix-Zweig

    übernommen werden
Ganesan Srinivasan 19.04.2016 07:18
quelle