Results 1 to 5 of 5

Git Revert Merge

  1. #1 Reply With Quote
    Tieftöner  Lookbehind's Avatar
    Join Date
    Dec 2007
    Posts
    14,429
    Heyho, ich brauche mal ein bisschen Hilfe.

    Ich habe ein Git Repo mit mehreren Branches, von denen aber nur 2 im Moment wirklich relevant sind. Nennen wir sie Master und Feature.

    Passiert ist folgendes: Feature ist irgendwann mal aus Master hervor gegangen. Seit dem gab er reichlich Änderungen an Master und an Feature. Irgendwann wurde beschlossen die beiden zusammen zu führen. Vorgehen wie folgt: Master in Feature mergen. Dabei gab es etliche Konflikte, die von Hand aufgelöst werden mussten, und die auch teilweise Code-Rewrite erforderten. Anschließend gab es ein paar weitere Commits in Feature, um noch einige Fehler aus zu bügeln, die durch den Merge entstanden sind. Als dann alles funktionierte wurde Feature wieder in Master gemerget (Fast Forward). Feature wurde seit dem nicht mehr angefasst. Aber in Master gab es ein paar Änderungen, die nicht inhaltlich im Zusammenhang mit dem Merge stehen, aber durchaus Code betreffen, der auch am Merge beteiligt war.

    Jetzt wurde beschlossen den Merge nach Master rückgängig zu machen und ich sitze hier und überlege, wie ich das am sinnvollste anstelle. Ich möchte gerne die Änderungen nach dem Merge nach Master behalten, oder zumindest wieder einbringen können. Außerdem den aktuellen Stand von Master gerne in einem separaten Branch sichern (ich habe nämlich die Vermutung, dass wir das doch noch mal aus dem Keller holen müssen). Der Feature-Branch soll auf seinem gemergeten Stand bleiben.

    Nach meinem Verständnis würde ich wie folgt vorgehen:
    - Branch Master: git checkout -b backupbranch
    - Branch Master: git revert <Comit-IDs> # Hier würde ich die Commits reverten, die zwischen dem Merge von Master nach Feture und dem FF-Merge von Feature nach Master entstanden sind.
    - Branch Master: git revert -m 1 <Comit-ID> # Die Commit-ID vom Merge von Master nach Feature rückgängig machen (wohlgemerkt nur un Master)

    Allerdings: (Aus man git-revert)
    Code:
           -m parent-number, --mainline parent-number
               Usually you cannot revert a merge because you do not know which
               side of the merge should be considered the mainline. This option
               specifies the parent number (starting from 1) of the mainline and
               allows revert to reverse the change relative to the specified
               parent.
    
               Reverting a merge commit declares that you will never want the tree
               changes brought in by the merge. As a result, later merges will
               only bring in tree changes introduced by commits that are not
               ancestors of the previously reverted merge. This may or may not be
               what you want.
    Das liest sich, als könnte ich die beiden Branches auch nie wieder zusammenführen. Ob ich das wirklich will?

    Tja. Und wie geht es "richtig"?

    TIA
    Look
    Lookbehind is offline

  2. #2 Reply With Quote
    Pretty Pink Pony Princess  Multithread's Avatar
    Join Date
    Jun 2010
    Location
    Crystal Empire
    Posts
    10,618
    Naja, du kannst später schon dein Feature in den Master mergen, nur werden alle Änderungen, welche du im rückgängig gemachten Merge gelöscht hast, nicht mehr mitgenommen.

    Du kannst nicht nur ein Revert machen, du kannst auch die Laufumgebung auf den entsprechenden commit setzen.
    Vielleicht hilft dir git reset weiter?
    Zumindest würde Ich mal prüfen, ob das deine Anforderungen erfüllt, vermutlich via hardreset und einem push-force.
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread is offline

  3. #3 Reply With Quote
    Tieftöner  Lookbehind's Avatar
    Join Date
    Dec 2007
    Posts
    14,429
    Quote Originally Posted by Multithread View Post
    Naja, du kannst später schon dein Feature in den Master mergen, nur werden alle Änderungen, welche du im rückgängig gemachten Merge gelöscht hast, nicht mehr mitgenommen.
    Eben, das ist ja das Problem.
    Quote Originally Posted by Multithread View Post
    Du kannst nicht nur ein Revert machen, du kannst auch die Laufumgebung auf den entsprechenden commit setzen.
    Vielleicht hilft dir git reset weiter?
    Zumindest würde Ich mal prüfen, ob das deine Anforderungen erfüllt, vermutlich via hardreset und einem push-force.
    Revert geht nicht so einfach, weil das Repo bereits gepublisht ist und ich nicht alleine daran arbeite. ... das Ganze hat sich über ein paar Wochen hin gezogen.

    Oder kann ich ein revert machen, ohne die History bei andere kaputt zu machen?
    Lookbehind is offline

  4. #4 Reply With Quote
    Pretty Pink Pony Princess  Multithread's Avatar
    Join Date
    Jun 2010
    Location
    Crystal Empire
    Posts
    10,618
    Wenn du die Änderung Später wiederherstellen willst, kannst du auch das reverte reverten

    Unrevert a revert

    Bei einem Revert verlierst du erstmal keine History, weder lokal noch global.

    ev. haben wir für dein Problem schon viel zu weit gesucht und du hattest die Lösung schon von anfang an richtig.
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread is offline

  5. #5 Reply With Quote
    Tieftöner  Lookbehind's Avatar
    Join Date
    Dec 2007
    Posts
    14,429
    Hm, ok, irgendwie fühlt sich das für mich eher plump an. Als müsste es da was eleganteres geben. Aber ok. Was muss, das muss. Zum Glück sind Branches billig. Für die Rückführung werden wir wohl etwas Zeit brauchen. Die anstehenden Merges sind mit Sicherheit nicht konfliktfrei und ich fürchte die lassen sich auch nicht in 5 Minuten lösen. Nunja, sei's drum.

    Danke für die Einschätzung.
    Lektion: Merges rückgängig machen, um sie für später auf zu schieben, ist verflucht aufwändig.
    Lookbehind is offline

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •