Wählen Sie eine Reihe von Commits in einem Unterverzeichnis oder Teilbaum aus

76

Wie kann ich Cherry-Pick anweisen, eine Reihe von Commits auszuwählen?

Oder mit anderen Worten, wenden Sie den Unterschied zwischen zwei Commits auf den aktuellen Status des Repositorys an?

Folgendes funktioniert nicht (Cherry-Pick hat keine --squash-Option):

git cherry-pick --squash e064480..eab48b59c

Hinweis: Mein Anwendungsfall befindet sich in einem Teilbaumszenario - bevor jemand anfängt zu argumentieren, dass ich nicht quetschen sollte.

Das Folgende funktioniert, aber dann habe ich eine Reihe von separaten Commits. Ich kann sie anschließend manuell mit interaktivem Rebase quetschen.

git cherry-pick -X subtree=vendor/package e064480..eab48b59c

Gibt es eine Möglichkeit, das Quetschen als Teil des Kirschpflückens durchzuführen?

Donquijote
quelle

Antworten:

110

Weitergeben -nan git cherry-pick. Dadurch werden alle Festschreibungen angewendet, jedoch nicht festgeschrieben. Führen Sie dann einfach git commitalle Änderungen in einem einzigen Commit aus.

David Deutsch
quelle
2
Was ist, wenn es mehrere Konflikte innerhalb der Reichweite von Commits gibt, die von Kirschen ausgewählt wurden?
Sazzad Hissain Khan
6
@SazzadHissainKhan, obwohl ich mir ziemlich sicher bin, dass es auf die gleiche Weise funktionieren würde (dh Sie lösen jeden Konflikt und verwenden ihn dann git cherry-pick --continue), ist es wahrscheinlich am sichersten, den -nin diesem Fall wegzulassen, damit Sie sich nach Abschluss der Vorgänge jeden ansehen können Individuelles Commit und Bestätigung, dass alles in Ordnung ist. Dann können Sie sie über eine interaktive Rebase quetschen.
David Deutsch
1
In meinem Fall hatte ich bereits ein Commit ausgewählt und wollte ein weiteres Commit unterdrücken, das einen Tippfehler behebt, der mit dem ersten Commit eingeführt wurde. Da ich das zweite Commit nicht ausgewählt habe, habe ich es mit der -nOption ( --no-commit) ausgewählt und dann das erste Commit mit git commit --amend --no-editbearbeitet (die Option ohne Bearbeitung verwendet die Festschreibungsnachricht des ersten Commits erneut und fordert nicht zur Eingabe von a auf) ein neues).
CodeManX
0

folge von master => cherry wähle zwei Commits aus einem anderen Zweig

Git Checkout Master

Git Cherry-Pick: 1

Git Cherry-Pick: 2

git reset --soft HEAD ~ 2 (Anzahl der Cherry Pick Commits, dh 2)

git hinzufügen.

Git Commit

Jayen Chondigara
quelle