Nehmen Sie alle meine Änderungen in den aktuellen Zweig und verschieben Sie sie in einen neuen Zweig in Git

105

Ich begann mit der Arbeit an einer meiner Meinung nach geringfügigen Fehlerbehebung in meinem Hauptzweig. Es ist jedoch so weit außer Kontrolle geraten, dass ich mir wünschte, ich hätte einen separaten Zweig geschaffen, um die Entwicklung überhaupt durchzuführen.

Im Moment möchte ich also Folgendes tun:

  1. Erstellen Sie einen neuen Zweig mit dem Namen "Kante".
  2. Verschieben Sie alle geänderten / nicht verfolgten Dateien auf dem Master an den Rand (so dass der Master gegenüber dem Zeitpunkt, an dem ich die Fehlerbehebung gestartet habe, unverändert bleibt).
  3. Beende meine Arbeit am Rand, verschmelze wieder mit dem Meister

Wie kann ich das machen?

Tom Lehman
quelle

Antworten:

103

Wenn Sie noch nichts begangen haben, sind Sie bereits in der richtigen Position.

  1. Erstellen Sie einen neuen Zweig: git checkout -b edge
  2. Ihre Dateien haben sich nicht geändert. Genau das, git addwas Sie brauchen und wie gewohnt festlegen müssen.
  3. Wenn Sie auf fertig zu begehen edge, wechseln Sie wieder zu mastermit git checkoutund git merge edge.
JB.
quelle
Hatte noch nichts begangen, also war diese erste Zeile ein willkommener Anblick ... Puh, das war eigentlich ziemlich schmerzlos :-)
Drenai
87

Um die Antwort von JB zu ergänzen: Wenn Sie bereits einige Commits für den Master vorgenommen haben, was sich als "Rand" -Anstrengung herausstellte, könnten Sie:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply
VonC
quelle
Der Stash Wrapper ist nicht unbedingt erforderlich, sondern nur für nicht festgeschriebene Arbeitsänderungen, oder?
HaveAGuess
4
@ HatAGuess richtig. Mit "Alle meine Änderungen übernehmen" habe ich auch aktuelle, noch nicht hinzugefügte Änderungen aufgenommen. Daher das Versteck.
VonC
Könnten die zweite und dritte Zeile nicht zu "git checkout -b edge master" zusammengefasst werden?
Paul Lynch
@PaulLynch diese Commits unter Berücksichtigung (auf master), der auf sein sollte edge sind auf master, ja. Ich habe die Antwort bearbeitet.
VonC
Ich sehe nicht, wie git stashnützlich hier ist, da die Verwendung git checkout -bden Arbeitsbaum überhaupt nicht ändert ...
user1686
13

Wenn Sie versuchen, die Arbeit vom Master in einen Zweig zu verschieben, der bereits vorhanden ist, sich jedoch hinter dem Master befindet, können Sie mit git nicht zum anderen Zweig wechseln. In diesem Fall gehen Sie wie folgt vor:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
Jesse P.
quelle