Zusammenführen zu einem bestimmten Commit

373

Ich habe einen neuen Zweig mit dem Namen newbranchdes masterZweigs in Git erstellt. Jetzt habe ich eine Arbeit erledigt und wollen fusionieren newbranchzu master; Ich habe jedoch einige zusätzliche Änderungen an vorgenommen newbranchund möchte newbranchbis zum viertletzten Commit zusammenführen master.

Ich habe verwendet, cherry-pickaber es zeigt die Meldung, die richtigen Optionen zu verwenden:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Kann ich mergestattdessen git verwenden?

git merge newbranch <commitid>
Dau
quelle

Antworten:

593

Sicher, in der masterBranche zu sein, ist alles, was Sie tun müssen:

git merge <commit-id>

Wo commit-idist der Hash des letzten Commits newbranch, den Sie in Ihrer masterFiliale erhalten möchten?

Sie können mehr über jeden git-Befehl erfahren, indem Sie dies tun git help <command>. In diesem Fall ist es git help merge. Und Dokumente sagen, dass das letzte Argument für den mergeBefehl lautet <commit>..., sodass Sie auf jedes Commit oder sogar mehrere Commits verweisen können. Letzteres habe ich allerdings nie selbst gemacht.

KL-7
quelle
30
nicht nur ein einziges Commit, sondern alle Commits vorcommit-id
Dau
53
Ja, es wird alle Commits von fusioniert newbranchseit der Zeit seine Geschichte von wich masterbis commit-idin masterZweig. Sie können sich git merge <commit-id>vorstellen, einen unbenannten Zweig, der mit endet, commit-idin Ihrem aktuellen Zweig zusammenzuführen.
KL-7
2
Kann ich mithilfe der Festschreibungs-ID zwischen zwei anderen lokalen Zweigen als dem Master zusammenführen?
Skt
1
@skt, Sie können sich einfach in dem lokalen Zweig befinden, in den Sie zusammenführen möchten, bevor Sie ihn verwenden git merge. Das heißt, Sie möchten Commit 18a6fac von Zweig b2 in Zweig b1 zusammenführen. Tun git checkout b1; git merge 18a6fac
Sie
1
Dies scheint NICHT zu funktionieren. Wenn ich mich in einem Zweig befinde, in den ich zusammenführen möchte, und es einen anderen Zweig mit Commits AB und C gibt, und ich in C zusammenführe, werden nur die in C vorgenommenen Änderungen erhalten, nicht A und B.
ggb667
12

Um die Verzweigung sauber zu halten, können Sie Folgendes tun:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

Auf diese Weise endet newbranch dort, wo es zu master zusammengeführt wurde, und Sie arbeiten weiter an newbranch2.

tkruse
quelle
1

Führen Sie den folgenden Befehl in den aktuellen Zweigordner aus, um ihn von diesem <commit-id>zum aktuellen Zweig zusammenzuführen. Führen --no-commitSie kein neues Commit automatisch durch

git merge --no-commit <commit-id>

git merge --continue kann nur ausgeführt werden, nachdem die Zusammenführung zu Konflikten geführt hat.

git merge --abort Brechen Sie den aktuellen Konfliktlösungsprozess ab und versuchen Sie, den Status vor dem Zusammenführen zu rekonstruieren.

ElasticCode
quelle