887 Stimmen

git cherry-pick sagt "...38c74d ist ein Merge, aber es wurde keine Option -m angegeben".

Ich habe einige Änderungen in meinem Master-Zweig vorgenommen und möchte diese Upstream bringen. Wenn ich die folgenden Commits auswähle. Allerdings bleibe ich bei fd9f578 hängen, wo Git sagt:

$ git cherry-pick fd9f578
fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given.

Was will mir Git damit sagen und ist Cherry-Pick das Richtige für diesen Zweck? Der Master-Zweig enthält Änderungen an Dateien, die im Upstream-Zweig geändert wurden, daher bin ich mir sicher, dass es einige Merge-Konflikte geben wird, aber diese sind nicht allzu schwer zu beheben. Ich weiß, welche Änderungen wo nötig sind.

Dies sind die Commits, die ich in den Upstream bringen möchte.

e7d4cff added some comments...
23e6d2a moved static strings...
44cc65a incorporated test ...
40b83d5 whoops delete whitspace...
24f8a50 implemented global.c...
43651c3 cleaned up ...
068b2fe cleaned up version.c ...
fd9f578 Merge branch 'master' of ssh://extgit/git/sessions_common
4172caa cleaned up comments in sessions.c ...

233voto

Hong Tang Punkte 2054

-m bedeutet die übergeordnete Nummer.

Aus der Git-Dokumentation:

Normalerweise können Sie eine Zusammenführung nicht auswählen, weil Sie nicht wissen, welche Seite der Zusammenführung als Hauptlinie betrachtet werden soll. Diese Option spezifiziert die übergeordnete Nummer (beginnend mit 1) der Hauptlinie an und ermöglicht es Cherry-Pick, die Änderung relativ zur angegebenen Hauptlinie wiederzugeben.

Wenn Ihr Commit-Baum zum Beispiel wie unten aussieht:

- A - D - E - F -   master
   \     /
    B - C           branch one

dann git cherry-pick E wird das Problem, mit dem Sie konfrontiert sind, hervorrufen.

git cherry-pick E -m 1 bedeutet die Verwendung D-E , während git cherry-pick E -m 2 bedeutet die Verwendung B-C-E .

9voto

ephemerr Punkte 1627

Vereinfachung der Methode von @Daira Hopwood, die für die Auswahl eines einzelnen Commits geeignet ist. Benötigt keine temporären Zweige.

Im Falle des Autors:

  • Z ist erwünscht Übergabe (fd9f578)
  • Y wird vorher festgelegt
  • X aktueller Arbeitszweig

dann tun:

git checkout Z   # move HEAD to wanted commit
git reset Y      # have Z as changes in working tree
git stash        # save Z in stash
git checkout X   # return to working branch
git stash pop    # apply Z to current branch
git commit -a    # do commit

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X