it-swarm.com.de

Verschieben Sie vorhandene, nicht festgeschriebene Arbeiten in einen neuen Zweig in Git

Ich habe mit der Arbeit an einem neuen Feature begonnen und nach einigem Codieren beschlossen, dass dieses Feature in einem eigenen Zweig sein sollte.

Wie verschiebe ich die vorhandenen nicht festgeschriebenen Änderungen in einen neuen Zweig und setze meinen aktuellen zurück?

Ich möchte meinen aktuellen Zweig zurücksetzen und gleichzeitig die vorhandene Arbeit an der neuen Funktion beibehalten.

2902
Dane O'Connor

Verwenden Sie Folgendes:

git checkout -b <new-branch>

Dadurch bleibt Ihr aktueller Zweig unverändert. Erstellen Sie einen neuen Zweig, checken Sie ihn aus und behalten Sie alle Ihre Änderungen bei. Sie können dann ein Commit durchführen mit:

git add <files>

und verpflichten Sie sich zu Ihrer neuen Niederlassung mit:

git commit -m "<Brief description of this commit>"

Die Änderungen im Arbeitsverzeichnis und die Änderungen im Index gehören noch keinem Zweig an. Dies ändert sich dort, wo diese Änderungen enden würden.

Sie haben nicht reset Ihren ursprünglichen Zweig, es bleibt wie es ist. Das letzte Commit für <old-branch> bleibt unverändert. Deshalb checkout -b und dann festschreiben.

3404
knittl

Alternative:

  1. Aktuelle Änderungen in einem temporären Speicher speichern:

    $ git stash

  2. Erstellen Sie einen neuen Zweig, der auf diesem Stash basiert, und wechseln Sie zum neuen Zweig:

    $ git stash branch <new-branch> [email protected]{0}

Tipp: Verwenden Sie die Tabulatortaste, um die Eingabe des Stashnamens zu reduzieren.

305
Robin Qiu

Wenn Sie während der Codierung in Ihrem Hauptzweig Commits ausgeführt haben, diese Commits aber jetzt in einen anderen Zweig verschieben möchten:

  1. Kopieren Sie Ihren aktuellen Verlauf in einen neuen Zweig, und bringen Sie auch nicht festgeschriebene Änderungen mit:

    git checkout -b <new-feature-branch>
    
  2. Erzwinge nun das Zurücksetzen des ursprünglichen "chaotischen" Zweigs: (ohne zu ihm zu wechseln)

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

    Zum Beispiel:

    git branch -f master Origin/master
    

    oder wenn Sie 4 Commits gemacht haben:

    git branch -f master HEAD~4
    

Warnung: Es scheint, dass git branch -f master Origin/master das zurücksetzt Verfolgungsinformationen für diesen Zweig. Wenn Sie also Ihren Zweig master so konfiguriert haben, dass er an eine andere Stelle als Origin/master verschoben wird, geht diese Konfiguration verloren.

Eine Alternative ist die Verwendung von diese Reset-Technik . Mit diesen Anweisungen werden jedoch alle nicht festgeschriebenen Änderungen verworfen, die Sie vorgenommen haben. Wenn Sie diese behalten möchten, verstauen Sie sie zuerst und heben Sie sie am Ende auf.

43
joeytwiddle

Das übliche Szenario lautet wie folgt: Ich habe vergessen, den neuen Zweig für das neue Feature zu erstellen, und habe die gesamte Arbeit im alten Feature-Zweig ausgeführt. Ich habe die gesamte "alte" Arbeit für den Masterzweig bereitgestellt und möchte, dass mein neuer Zweig aus dem "Master" wächst. Ich habe aus meiner neuen Arbeit kein einziges Commit gemacht. Hier ist die Zweigstruktur: "master" -> "Old_feature"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply
21
Alex Burov

Wenn Sie es festschreiben, können Sie auch die ID für das einzelne Festschreiben auswählen. Ich mache das oft, wenn ich mit der Arbeit in master beginne und dann eine lokale Verzweigung erstellen möchte, bevor ich zu meinem Origin/hochschiebe.

git cherry-pick <commitID>

Es gibt eine Menge, die Sie mit Cherry-Pick machen können, wie beschrieben hier , aber dies könnte ein Anwendungsfall für Sie sein.

17
password

Ich benutzte @ Robin Antworte und liste alles auf, was ich getan habe,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> [email protected]{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

! Wenn das Repo mehr als einen Stash hat, sehen Sie, welchen Sie auf den neuen Zweig anwenden sollen:

git stash list  
  [email protected]{0}: WIP on ...  
  [email protected]{1}: WIP on ...

und inspizieren Sie die einzelnen Verstecke durch,

git stash show [email protected]{1}

Oder inspizieren Sie alle Verstecke auf einmal:

git stash list -p
0
NBhat

Mit GitHub Desktop gibt es eine wirklich einfache Möglichkeit, dies zu tun, da ich nicht glaube, dass es zuvor eine Funktion gab.

Alles, was Sie tun müssen, ist in GitHub Desktop in den neuen Zweig zu wechseln. Sie werden aufgefordert, Ihre Änderungen im aktuellen Zweig (der gespeichert wird) zu belassen oder Ihre Änderungen in den neuen Zweig mitzunehmen. Wählen Sie einfach die zweite Option, um die Änderungen in den neuen Zweig zu übernehmen. Sie können dann wie gewohnt festschreiben.

GitHub Desktop

0
Kristofer Doman