it-swarm.com.de

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

Ich habe an einem Projekt gearbeitet, aber leider habe ich vergessen zu meinem Zweig gewechselt und habe als solcher am Master gearbeitet

Wie kann ich die Arbeit (3 Dateien), die ich hier gemacht habe, vom Master in meinen Zweig (zum Beispiel branch12) kopieren, ohne mich zum Master zu verpflichten?

301
Alex

Klingt wie alles, was Sie brauchen, ist das Folgende:

git stash
git checkout branch123
git stash apply

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

495
gnab

Dies ist eine alte Frage, aber sie steht bei Google ganz oben, wenn es darum geht, "am falschen Zweig zu arbeiten". Ich denke, eine bessere Antwort ist, einfach den Zweig zu überprüfen, an dem Sie wollten arbeiten. Keine Notwendigkeit, etwas zu verstauen:

git checkout branch123

Das Standardverhalten von checkout besteht darin, geänderte Dateien in Ihrem Arbeitsverzeichnis NICHT zu überschreiben, damit Sie nichts verlieren. Basierend auf dem, was ich gefunden habe hier .

Bearbeiten: Diese Methode funktioniert nur, wenn die Dateien, die Sie im Arbeitsverzeichnis geändert haben, sowohl in master als auch in branch123. Dies wurde tatsächlich von Jefromi in den Kommentaren zur akzeptierten Antwort hervorgehoben, aber ich verstand nicht, was er sagte, als ich es das erste Mal las.

43
Russel Dirks

git stash ist was Sie brauchen.

eine vollständige Erklärung finden Sie in Git-Tools-Stashing

6
Roee Gavirel

Da es möglich ist, einen neuen Zweig zu erstellen, aber keinen vorhandenen Zweig auszuchecken, während Dateien ausgecheckt sind, habe ich den folgenden Trick gefunden, der einen temporären Zweig verwendet, um zu funktionieren:

Dieses Szenario funktioniert zumindest mit dem VS 2015 Git-Plug-In, 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 anderen Namen, den Sie nicht verwenden) vom Master. Ausgecheckte Dateien werden jetzt im temporären und nicht im Master ausgecheckt.
  3. temp-Änderungen einchecken (Master bleibt unberührt)
  4. Jetzt ist alles eingecheckt und es ist möglich, eine vorhandene Filiale auszuchecken. Schauen Sie sich den gewünschten Zweig an (den Zweig, mit dem ich die Änderungen vornehmen wollte). 3.5 Git Rebase
  5. füge temporär zum gewünschten Zweig hinzu. Jetzt befinden sich die Änderungen im richtigen Zweig.
  6. löschen Sie den temporären Zweig, da er nicht mehr benötigt wird

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

0
Pasi