So übernehmen Sie Änderungen an einem neuen Zweig

149

Ich habe gerade Änderungen an einem Zweig vorgenommen. Wie kann ich die Änderungen auf den anderen Zweig übertragen?

Ich versuche zu verwenden:

git checkout "the commmit to the changed branch" -b "the other branch"

Ich denke jedoch nicht, dass dies das Richtige ist, da ich in diesem Fall einen neuen Zweig erstelle, anstatt die Änderungen auf "den anderen Zweig" zu übertragen.

Soll ich stattdessen den folgenden Befehl verwenden?

git merge "the other branch"
user1988385
quelle
Nur ein Commit oder mehrere?
Carl Norum

Antworten:

265

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Überprüfen Sie zunächst Ihre neue Niederlassung. Fügen Sie dann alle Dateien hinzu, die Sie für das Staging festlegen möchten. Zuletzt schreiben Sie alle Dateien fest, die Sie gerade hinzugefügt haben. Möglicherweise möchten Sie git push origin your-new-branchdanach eine Änderung vornehmen, damit Ihre Änderungen auf der Fernbedienung angezeigt werden.

John Brodie
quelle
1
Muss ich immer noch "git add <files>" verwenden, da ich den neuen Zweig von git checkout v3.0 (dem Zweig, bevor ich Änderungen vorgenommen habe) new-branch erhalten habe?
user1988385
Sie können a tun, um git statuszu sehen, was gerade inszeniert ist und was nicht.
John Brodie
5
Warum beide git addund git commit -a?
Carl Norum
11
Es ist nicht git checkout -b your-new-branchstatt git checkout your-new-branch?
Schrödingers
1
Wie wäre es, wenn ich bereits eine Datei verfolgt habe und zu einem neuen Zweig wechseln möchte, um diese Dateien dem neu erstellten Zweig hinzuzufügen?
Arschkönig eine Frage
56

Wenn Sie keine Änderungen vorgenommen haben

Wenn Ihre Änderungen mit dem anderen Zweig kompatibel sind

Dies ist bei der Frage der Fall, da das OP einen neuen Zweig festschreiben möchte und dies auch gilt, wenn Ihre Änderungen mit dem Zielzweig kompatibel sind, ohne ein Überschreiben auszulösen.

Wie in der akzeptierten Antwort von John Brodie können Sie einfach den neuen Zweig auschecken und die Arbeit übernehmen:

git checkout -b branch_name
git add <files>
git commit -m "message"

Wenn Ihre Änderungen nicht mit dem anderen Zweig kompatibel sind

Wenn Sie den Fehler erhalten:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Dann können Sie Ihre Arbeit verstecken, einen neuen Zweig erstellen, dann Ihre Änderungen speichern und die Konflikte lösen:

git stash
git checkout -b branch_name
git stash pop

Es ist, als hätten Sie diese Änderungen nach dem Erstellen des neuen Zweigs vorgenommen. Dann können Sie wie gewohnt festlegen:

git add <files>
git commit -m "message"

Wenn Sie Änderungen festgeschrieben haben

Wenn Sie die Commits im ursprünglichen Zweig behalten möchten

Siehe die Antwort von Carl Norum mit Kirschernte, die in diesem Fall das richtige Werkzeug ist:

git checkout <target name>
git cherry-pick <original branch>

Wenn Sie die Commits nicht im ursprünglichen Zweig behalten möchten

Siehe die Antwort von joeytwiddle zu diesem potenziellen Duplikat . Führen Sie einen der oben genannten Schritte aus und rollen Sie den ursprünglichen Zweig zurück:

git branch -f <original branch> <earlier commit id>

Wenn Sie Ihre Änderungen auf eine freigegebene Fernbedienung wie GitHub übertragen haben, sollten Sie dieses Rollback nur versuchen, wenn Sie wissen, was Sie tun.

Miguelmorin
quelle
3
Jeder sollte diesen Code ausprobieren. Da die meisten Leute, die nach der Antwort suchen, bereits einige Änderungen an Ihrem vorhandenen Code vorgenommen haben.
Sushin Pv
2
Warum hast du Stash und Stash Pop hinzugefügt? Wenn Sie einen neuen Zweig auschecken, können Sie Ihre Änderungen hinzufügen und festschreiben, ohne sie verstauen zu müssen.
Tristan
@Tristan Sie haben Recht, wenn die Änderungen kompatibel sind und die Dateien nicht überschrieben werden. Andernfalls erhalte ich error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Möchten Sie eine neue Antwort schreiben oder meine Antwort bearbeiten? Wenn nicht, kann ich es selbst bearbeiten.
Miguelmorin
Ok, du hast vollkommen recht. Ich denke, Sie sollten Ihre Antwort jedoch vervollständigen, um zu zeigen, was sie zusätzlich zu der akzeptierten Antwort bringt.
Tristan
@Tristan Ich habe das gemacht. Das OP fragte nach einer neuen Niederlassung. In diesem Fall ist die akzeptierte Antwort die richtige. Ich behalte meine, da andere Leute meine Antwort nützlich fanden. Es ist eine lange Antwort geworden und ich freue mich über jede Rückmeldung.
Miguelmorin
24

Wenn ich richtig verstehe, haben Sie eine Verpflichtung eingegangen changed_branchund möchten diese Verpflichtung kopieren other_branch? Einfach:

git checkout other_branch
git cherry-pick changed_branch
Carl Norum
quelle
5
Dies ist die richtige Antwort auf das, was er erreichen will.
Sean