Git - Arbeiten am falschen Zweig - Kopieren von Änderungen in den vorhandenen Themenzweig

333

Ich habe an einem Projekt gearbeitet, aber leider habe ich vergessen , zu meiner Niederlassung zu wechseln, und als solches habe ich am Master gearbeitet

Wie kann ich die Arbeit (3 Dateien), die ich hier erledigt habe, vom Master in meinen Zweig (z. B. branch123 ) kopieren, ohne mich zum Master zu verpflichten?

Alex
quelle

Antworten:

540

Klingt so, als ob Sie nur Folgendes benötigen:

git stash
git checkout branch123
git stash apply

Dann sollten Sie wieder in Ihrem eigenen Zweig sein, ohne den Hauptzweig zu berühren.

gnab
quelle
6
ok, ich habe das ausgeführt, aber wenn ich zurück zum Master (Git Checkout Master) wechsle und den Git-Status ausführe, werden dieselben Dateien immer noch "geändert" - wird das erwartet?
Alex
5
Möglicherweise müssen Sie nicht wirklich verstauen, wenn die Unterschiede zwischen Ihrem aktuellen Zweig (Master) und dem Themenzweig (Zweig 123) in keiner der Dateien enthalten sind, die Sie lokal geändert haben. Mit Git können Sie in diesem Fall einfach den Themenzweig überprüfen.
Cascabel
3
@ Alex: Ja, das wird erwartet. Dies beinhaltet keine Commits. stashspeichert lokale Änderungen und stash applybringt sie dann zurück.
Cascabel
6
Wie kann ich sie von der Hauptniederlassung "loswerden", um das sauber zu lassen?
Alex
7
git reset --hard HEADund Sie sind zurück zu dem letzten Commit, das Sie in Ihrem Hauptzweig vorgenommen haben.
Gnab
46

Die akzeptierte Antwort ist die gründlichste, aber es gibt einen Sonderfall, in dem Sie vereinfachen können. Wenn die Dateien, die Sie im Arbeitsverzeichnis geändert haben, in beiden identisch sind masterund branch123Sie dies einfach tun können

git checkout branch123

Sie müssen nichts verstauen, da das Standardverhalten von darin checkoutbesteht, geänderte Dateien in Ihrem Arbeitsverzeichnis NICHT zu überschreiben, damit Sie nichts verlieren. (Dies wurde tatsächlich in den Kommentaren zuerst von Cascabel erwähnt)

Wie andere Leute in den Kommentaren erwähnt haben branch123, können Sie dies tun , wenn es noch nicht existiert

git checkout -b branch123

Basierend auf dem, was ich hier gefunden habe .

Russel Dirks
quelle
3
Oder, wenn Sie eine neue Niederlassung erstellen möchten,git checkout -b newbranch
Phil Mitchell
2
Das funktioniert für mich besser als Stash und es ist viel einfacher. Vielen Dank!
Matthias
31
Nein, das funktioniert nicht. Git zeigt Ihnen die folgende Meldung: "Übernehmen Sie Ihre Änderungen oder speichern Sie sie, bevor Sie die Zweige wechseln können."
Dsharew
1
@DegenSharew: Ja, Sie haben in einigen Fällen Recht, nämlich wenn die Dateien, die Sie im Arbeitsverzeichnis geändert haben, in masterund nicht identisch sind branch123. Siehe meine bearbeitete Antwort.
Russel Dirks
1
Das hat bei mir super funktioniert. Ich hatte noch keinen Zweig erstellt, also habe ich Folgendes getan: git checkout -b newbranchname. Meine Änderungen zeigten sich in diesem Zweig von selbst.
Dex3703
0

Da es möglich ist, einen neuen Zweig zu erstellen, einen vorhandenen Zweig jedoch nicht auschecken kann, während Dateien ausgecheckt werden, habe ich den folgenden Trick mit einem temporären Zweig gefunden:

Dieses Szenario funktioniert zumindest mit dem Git-Plugin VS 2015, würde aber höchstwahrscheinlich mit jedem Git-Tool funktionieren.

  1. Auschecken und Änderungen an Dateien im Master vornehmen (ups!, falscher Zweig)
  2. Erstellen Sie einen neuen Zweig "temp" (oder einen beliebigen nicht verwendeten Namen, den Sie auswählen) vom Master. Ausgecheckte Dateien werden jetzt vorübergehend und nicht mehr im Master ausgecheckt.
  3. Änderungen an der Temperatur einchecken (Master ist unberührt)
  4. Jetzt ist alles eingecheckt und es ist möglich, eine vorhandene Filiale auszuchecken. Überprüfen Sie den gewünschten Zweig (den Zweig, mit dem ich die Änderungen vornehmen wollte). 3.5 Git Rebase
  5. Temperatur mit dem gewünschten Zweig zusammenführen. Jetzt befinden sich die Änderungen im richtigen Zweig.
  6. Löschen Sie den temporären Zweig, da er nicht mehr benötigt wird

BEARBEITEN: Ich habe herausgefunden, dass Sie vor dem Zusammenführen eine Rebase (git rebase --onto) des temporären Zweigs durchführen müssen. Andernfalls werden die Änderungen im Master in die Zusammenführung einbezogen. Ein zusätzlicher Schritt 3.5 oben. Weitere Informationen zur Rebase finden Sie hier: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

Pasi
quelle
Könnten Sie bitte Ihre Antwort näher erläutern und etwas mehr Beschreibung der von Ihnen bereitgestellten Lösung hinzufügen?
Abarisone
Vielen Dank für Ihre Rückmeldung. Die Lösung ist jedoch recht einfach und folgt dem gleichen Prinzip wie die "Stash" -Lösung, außer dass anstelle des Stash ein temporärer Zweig verwendet wird. Dies ist zumindest für Visual Studio-Benutzer bequemer, da Stash vom GIT-Plugin nicht unterstützt wird
Pasi