git - Wenden Sie ein Commit für einen anderen Zweig auf die Arbeitskopie an

77

Ich habe also ein Commit mit einer hilfreichen Codeänderung, aber in einem anderen Zweig.

Ich möchte dieses Commit im anderen Zweig auf meine Arbeitskopie in meinem aktuellen Zweig anwenden (nicht als anderes Commit).

Ist das möglich? Wie würde ich das machen?

Ich dachte, ich würde dies teilen, hängt mit meiner vorherigen Frage zusammen, ist aber spezifisch für die Arbeitskopie: Git Cherry wählt ein Commit für einen anderen Zweig aus

Oliver Williams
quelle
Mögliches Duplikat von Git: Cherry-Pick zur Arbeitskopie ohne Commit
Mad Physicist

Antworten:

127

So fügen Sie die gewünschten Commits in verschiedene Zweige ein.

git cherry-pick <SHA-1>...<SHA-1> --no-commit

Wenden Sie die durch die Festschreibung (en) an der Spitze des Hauptzweigs eingeführte Änderung an und erstellen Sie mit dieser Änderung eine neue Festschreibung (en).

Die Syntax von ...ist ein Festschreibungsbereich. Holen Sie sich alle Commits vom Start (ausschließen) bis zum letzten. Wenn Sie möchten, dass ein einzelnes Commit ein einzelnes SHA-1 verwendet

Geben Sie hier die Bildbeschreibung ein


cherry-pick ohne sich zu verpflichten

Standardmäßig git cherry-pick verpflichten Ihre Änderungen, so , wenn Sie möchten herauspicken ohne alle begehen die Änderungen einfach die Add - -nFlag

Auf diese Weise können Sie die Änderungen überprüfen und manuell festschreiben, wenn Sie dies wünschen, oder abbrechen, wenn Sie auf zu viele Konflikte stoßen.

git cherry-pick -n <hash>

cherry-pick ein Merge Commit

Verwenden Sie das -mFlag, falls Sie eine Zusammenführung anstelle eines Commits auswählen müssen

#
# In this case, we select the [1] first parent in the commit
# Use git show <hash> to see a list of available parents
# 
git cherry-pick -m 1 <hash> 

Lesen Sie die vollständige git cherry-pickDokumentation für alle Optionen, die Sie verwenden können

CodeWizard
quelle
3
Vielen Dank! Sowohl für den klaren und gut formatierten Text als auch für das charmante Diagramm. Wenn du ein Buch schreibst, kaufe ich es ;-)
Spike0xff
1
In der Frage wird ausdrücklich "nicht als weiteres Commit" erwähnt, während in Ihrer Antwort explizit "mit dieser Änderung ein neues Commit erstellen" erwähnt wird. Was vermisse ich?
Amn
3
Sie vermissen das No-Commit-Flag
CodeWizard
git fetch remote
Dies
23

Sie können den git cherry-pickBefehl weiterhin verwenden . Siehe git cherry-pick --help:

   -n, --no-commit
       Usually the command automatically creates a sequence of
       commits. This flag applies the changes necessary to
       cherry-pick each named commit to your working tree and the
       index, without making any commit. In addition, when this
       option is used, your index does not have to match the HEAD
       commit. The cherry-pick is done against the beginning state
       of your index.

Sie können also einfach git cherry-pick -n <commitid>, und die Änderungen werden auf Ihr Arbeitsverzeichnis angewendet und im Index (wie git -a) bereitgestellt , aber nicht festgeschrieben.

Larsks
quelle
2
Ich habe die andere Antwort nur aufgrund des Diagramms und zusätzlicher Informationen akzeptiert, aber Ihr Beitrag ist immer noch sehr hilfreich. Vielen Dank!
Oliver Williams