2012-11-16 9 views
6

Mögliche Duplizieren:
How to cherry pick a range of commits and merge into another branchgit cherry-pick mehr begeht

Ich mag herauspicken 19 Commits von einem Zweig und sie auf einem anderen Zweig gilt. Alle Commits sind sequentiell (commit 1, commit 2 ... commit 19) und das letzte Commit ist nicht das letzte Commit (d. H. Es gibt andere Commits, die danach kommen, deren Änderungen ich nicht anwenden möchte). Wie kann ich meine Änderungen auf einen Zweig anwenden, ohne git cherry-pick für jeden Commit einzugeben?

Antwort

9

git cherry-Pick $ from_sha .. $ to_sha

+0

auf jeden Fall den richtigen Weg wählen, dies zu tun :) – g19fanatic

+0

Könnten Sie tun 'git cherry-pick HEAD..branch-name'? – Uri

0

Ein Weg, um es manuell zu tun (ohne Rosinenpickerei)


eine Niederlassung machen aus dem Kopf Ihrer Niederlassung wo die Commits sind git branch newB

hard reset dieser neue Zweig zum letzten commit git reset --hard <shaID of Commit19>


Methode 1

eine gemischte Rücksetz tun, um die direkt zu begehen, bevor die erste git reset --mixed <shaId of the mentioned commit> commit

auf dieser ‚modifizierten‘ -Code einen Vorrat zu tun haben, nur die 1 Festschreibungen bis 19 git stash

Gehe zu, wo du dieses Handbuch anwenden möchtest, und nimm einen Pop git checkout <dstBranch> & git stash pop


Methode 2 (dieses Verfahren wird das halte msgs commit)

tun, um eine Zurücksetzung des rechten commit, bevor der ersten git reset --hard <shaId of the mentioned commit>

commit tun, um eine zerquetschte merge mit dem reflogs vorherigem Zustand git merge --squash [email protected]{1}

Jetzt werden Sie sehen, dass die Commits 1 - 19 indiziert werden und wenn Sie einen Commit durchführen, wird die Commit-Nachricht mit allen einzelnen Commits-Nachrichten gefüllt ... so dass Sie die Nachricht wie gewünscht ändern können

Jetzt, wo Sie Ihre Commit haben, wählen Sie diese Commit, wo Sie es wollen. Es hat den Vorteil, alle gewünschten Commit-Nachrichten zu haben.


wenn Sie fertig sind die temp Zweig zu löschen, um loszuwerden, alle Junk, die Sie getan haben Ihre internen zu tun git branch -D newB

Verwandte Themen