Was sind die Merge-Strategien von git? [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
K2xL

Mögliches Duplikat:

Wann würden Sie die verschiedenen Git-Merge-Strategien verwenden?

Wenn Git Dateien zusammenführt, an denen ich arbeite, sehe ich:

Merge made by the 'recursive' strategy

Was genau ist die rekursive Strategie? Welche anderen Strategien gibt es (falls vorhanden)? Und was wäre der Vorteil, wenn man sie übereinander verwendet? Haben unterschiedliche Strategien unterschiedliche Leistungen? Oder könnten zwei unterschiedliche Strategien zu unterschiedlichen Zusammenführungsergebnissen führen?

  • Ein gutes Community-Wiki wurde hier gestartet: stackoverflow.com/questions/366860/…

    – Chris Messbuch

    9. Januar 2013 um 17:54 Uhr

  • Dies ist KEINE doppelte Frage. Der Benutzer fragt, was die Algorithmen sind, was nicht dasselbe ist, wie wann würden Sie sie verwenden. An diesen Stellen werden Algorithmen näher erläutert: REKURSIVE STRATEGIE: codicesoftware.blogspot.com/2011/09/… TEILBAUM ZUSAMMENFÜHREN: git-scm.com/book/en/Git-Tools-Subtree-Merging @Chris Missal: Nichts für ungut gemeint, aber der Community-Wiki-Kommentar oben enthält den gleichen Link wie das Feld “Mögliches Duplikat” oben, mit weniger Erklärung, und ist daher nur Lärm.

    – SteveS

    23. August 2013 um 18:29 Uhr


  • Mein Kommentar wurde gepostet, bevor er als Duplikat markiert wurde. Ich habe nur versucht, der Frage einige verwandte Informationen hinzuzufügen. -_Ö

    – Chris Messbuch

    23. August 2013 um 19:53 Uhr

  • Dies ist kein Duplikat … die andere Frage ist, wann Sie sie verwenden würden, und es wird davon ausgegangen, dass Sie bereits wissen, was sie sind. Ich will wissen, was zum Teufel sie sind!

    – Nick Manning

    11. Juni 2015 um 21:52 Uhr


  • Dies ist eine doppelte Frage. Überprüfen Sie dieses hier: stackoverflow.com/questions/55998614/…

    – Jayprakash Dubey

    20. Januar 2020 um 7:17 Uhr

Aus git help merge:

   The merge mechanism (git-merge and git-pull commands) allows the
   backend merge strategies to be chosen with -s option. Some strategies
   can also take their own options, which can be passed by giving
   -X<option> arguments to git-merge and/or git-pull.

   resolve
       This can only resolve two heads (i.e. the current branch and
       another branch you pulled from) using a 3-way merge algorithm. It
       tries to carefully detect criss-cross merge ambiguities and is
       considered generally safe and fast.

   recursive
       This can only resolve two heads using a 3-way merge algorithm. When
       there is more than one common ancestor that can be used for 3-way
       merge, it creates a merged tree of the common ancestors and uses
       that as the reference tree for the 3-way merge. This has been
       reported to result in fewer merge conflicts without causing
       mis-merges by tests done on actual merge commits taken from Linux
       2.6 kernel development history. Additionally this can detect and
       handle merges involving renames. This is the default merge strategy
       when pulling or merging one branch.

       The recursive strategy can take the following options:

       ours
           This option forces conflicting hunks to be auto-resolved
           cleanly by favoring our version. Changes from the other tree
           that do not conflict with our side are reflected to the merge
           result.

           This should not be confused with the ours merge strategy, which
           does not even look at what the other tree contains at all. It
           discards everything the other tree did, declaring our history
           contains all that happened in it.

       theirs
           This is opposite of ours.

       subtree[=path]
           This option is a more advanced form of subtree strategy, where
           the strategy makes a guess on how two trees must be shifted to
           match with each other when merging. Instead, the specified path
           is prefixed (or stripped from the beginning) to make the shape
           of two trees to match.

   octopus
       This resolves cases with more than two heads, but refuses to do a
       complex merge that needs manual resolution. It is primarily meant
       to be used for bundling topic branch heads together. This is the
       default merge strategy when pulling or merging more than one
       branch.

   ours
       This resolves any number of heads, but the resulting tree of the
       merge is always that of the current branch head, effectively
       ignoring all changes from all other branches. It is meant to be
       used to supersede old development history of side branches. Note
       that this is different from the -Xours option to the recursive
       merge strategy.

   subtree
       This is a modified recursive strategy. When merging trees A and B,
       if B corresponds to a subtree of A, B is first adjusted to match
       the tree structure of A, instead of reading the trees at the same
       level. This adjustment is also done to the common ancestor tree.

  • Das ist noch nicht ganz klar. Kann das jemand etwas klarer erklären?

    – reneruiz

    4. April 2014 um 1:48 Uhr

  • Handbuchseiten / Hilfeausgaben sind großartig, wenn Sie den Kontext verstehen und eine Auffrischung wünschen. Wenn Sie mit dem Thema nicht vertraut sind, können sie obskur und wenig hilfreich sein

    – Basic

    25. September 2015 um 22:14 Uhr

  • Die beste Erklärung, die ich finden konnte, ist hier stackoverflow.com/a/366940/536434

    – Briankip

    19. Mai 2017 um 9:17 Uhr

1297710cookie-checkWas sind die Merge-Strategien von git? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy