Git Cherry-Pick vs Merge Workflow


Answers

Meiner Meinung nach sollte das Rosinenpicken für seltene Situationen reserviert sein, wo es erforderlich ist, zum Beispiel, wenn man direkt an der "Master" -Abzweigung (Stamm, Hauptentwicklungszweig) gearbeitet hat und dann erkannt hat, dass es auch auf 'maint' angewendet werden sollte ". Sie sollten den Workflow entweder auf der Zusammenführung oder auf der Rebase (oder "git pull --rebase") basieren.

Bitte denken Sie daran, dass sich ein ausgewähltes oder rebasiertes Commit vom Standpunkt des Git unterscheidet (hat einen anderen SHA-1-Identifikator) als das Original, also unterscheidet es sich vom Commit im Remote-Repository. (In der Regel kann Rebase damit umgehen, da es die Patch-ID überprüft, dh die Änderungen, keine Commit-ID).

Auch in Git können Sie viele Zweige gleichzeitig zusammenführen: so genannte Oktopus-Merge . Beachten Sie, dass Octopus Merge ohne Konflikte erfolgreich sein muss. Trotzdem könnte es nützlich sein.

HTH.

Question

Angenommen, ich bin der Betreuer eines Repos, und ich möchte Änderungen von einem Mitarbeiter einholen. Es gibt einige mögliche Arbeitsabläufe:

  1. Ich cherry-pick jedes Commit von der Fernbedienung (in der Reihenfolge). In diesem Fall zeichnet git das Commit als nicht mit dem entfernten Zweig verbunden auf.
  2. Ich merge den Zweig zusammen, ziehe alle Änderungen ein und füge einen neuen "Konflikt" -Commit hinzu (falls erforderlich).
  3. Ich merge jedes Commit aus dem entfernten Zweig einzeln zusammen (wiederum in der Reihenfolge), wodurch Konflikte für jedes Commit aufgezeichnet werden können, anstatt alle zusammen als eins zu gruppieren.
  4. Der Vollständigkeit rebase könnte man eine rebase (wie die cherry-pick Option?), Aber ich verstehe, dass dies für den Contributor Verwirrung rebase kann. Vielleicht beseitigt das die Option 1.

In beiden Fällen 2 und 3 zeichnet git die Verzweigungshistorie der Commits auf, im Gegensatz zu 1.

Was sind die Vor- und Nachteile zwischen der Verwendung von cherry-pick oder merge Methoden beschrieben? Mein Verständnis ist, dass Methode 2 die Norm ist, aber ich finde, dass die Lösung eines großen Commit mit einem einzigen "Konflikt" Merge, ist nicht die sauberste Lösung.