Stellen wir uns vor, wir haben eine master
Niederlassung.
Dann erstellen wir eine newbranch
git checkout -b newbranch
und machen Sie zwei neue Commits für newbranch
: commit1 und commit2
Dann wechseln wir zu Master und machen cherry-pick
git checkout master
git cherry-pick hash_of_commit1
Wenn gitk
wir uns das ansehen, sehen wir, dass commit1 und seine von Kirschen ausgewählte Version unterschiedliche Hashes haben. Technisch gesehen handelt es sich also um zwei verschiedene Commits.
Schließlich verschmelzen wir newbranch
zu master
:
git merge newbranch
und sehen Sie, dass diese beiden Commits mit unterschiedlichen Hashes ohne Probleme zusammengeführt wurden, obwohl sie implizieren, dass dieselben Änderungen zweimal angewendet werden sollten, sodass einer von ihnen fehlschlagen sollte.
Führt git beim Zusammenführen wirklich eine intelligente Analyse des Inhalts von Commits durch und entscheidet, dass Änderungen nicht zweimal angewendet werden sollten, oder werden diese Commits intern als miteinander verknüpft markiert?
quelle
Nach einer solchen Zusammenführung haben Sie möglicherweise zweimal Commits in der Geschichte ausgewählt.
Lösung, um dies zu verhindern Ich zitiere aus einem Artikel, der für Zweige mit doppelten (von Kirschen gepflückten) Commits empfiehlt, Rebase vor dem Zusammenführen zu verwenden:
EDIT Korrekturen von David Lemons Kommentar angenommen
quelle
---Y---b2'---b4'