1196 Stimmen

Git-Zweig mit aktuellen Änderungen erstellen

Ich habe mit der Arbeit an meinem Meister Zweig und dachte, dass meine Aufgabe einfach sein würde. Nach einer Weile wurde mir klar, dass es mehr Arbeit bedeuten würde, und ich möchte all diese Arbeit in einem neuen Zweig erledigen.

Wie kann ich einen neuen Zweig erstellen und all diese Änderungen mitnehmen, ohne die Meister ?

954voto

VonC Punkte 1117238

Wenn Sie noch keinen Commit gemacht haben, würden nur (1: branch) und (3: checkout) ausreichen.
Oder, mit einem Befehl: git checkout -b newBranch

Mit Git 2.23+ (Q3 2019), die neues Kommando git switch würde die Verzweigung in einer Zeile erstellen (mit der gleichen Art von reset --hard also sich vor seiner Wirkung hüten ) :

# First, save your work in progress!
git stash

# Then, one command to create *and* switch to a new branch
git switch -f -c topic/wip HEAD~3

Wie bereits in der git reset Manpage :

$ git stash                # (0) Save your work in progress
$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. Sie haben einige Zusagen gemacht, stellen aber fest, dass sie zu früh waren, um in der " master Zweig". Sie wollen sie in einem Themenzweig weiterbearbeiten, also erstellen Sie " topic/wip "Abzweigung von der aktuellen HEAD .
  2. Zurückspulen der master Zweig, um diese drei Commits loszuwerden.
  3. Wechseln zu " topic/wip "Zweig und arbeiten Sie weiter.

Nochmals: eine neue Möglichkeit (seit 2019 und Git2.23), all das mit einem einzigen Befehl zu erledigen:

git switch -f -c topic/wip HEAD~3

Hinweis: Aufgrund der "zerstörerischen" Wirkung einer git reset --hard Befehl (er setzt den Index und den Arbeitsbaum zurück. Alle Änderungen an verfolgten Dateien im Arbeitsbaum seit <commit> verworfen werden), würde ich mich eher für diese Lösung entscheiden:

$ git reset --soft HEAD~3  # (2)

Dies würde sicherstellen, dass ich keine private Datei verliere (die nicht in den Index aufgenommen wurde).
Die --soft Option berührt weder die Indexdatei noch den Arbeitsbaum (sondern setzt den Kopf auf <commit> (wie bei allen Modi).


412voto

EeKay Punkte 5976

Wie in dieser Frage angegeben: Git: Erstellen eines Zweigs aus nicht gekennzeichneten/uncommited Änderungen auf Master : Versteck ist nicht notwendig.

Verwenden Sie einfach:

git checkout -b feature/newbranch

Alle nicht gebundenen Arbeiten werden in den neuen Zweig übernommen.

Wenn Sie versuchen, die Taste zu drücken, erhalten Sie die folgende Meldung

fatal: Der aktuelle Zweig feature/newbranch hat keinen Upstream-Zweig. Um den aktuellen Zweig zu pushen und den entfernten Zweig als Upstream zu setzen, verwenden Sie

git push --set-upstream origin feature/newbranch

Gehen Sie einfach wie vorgeschlagen vor, um die Verzweigung aus der Ferne zu erstellen:

git push --set-upstream origin feature/newbranch

115voto

AvadhP Punkte 1351

Folgen Sie diesen Schritten:

  1. Erstellen Sie einen neuen Zweig:

     git branch newfeature
  2. Neue Verzweigung auschecken: (dadurch wird Ihre Arbeit nicht zurückgesetzt.)

    git checkout newfeature
  3. Übertragen Sie nun Ihre Arbeit auf diesen neuen Zweig:

    git commit -s

Durch die oben genannten Schritte bleibt Ihr ursprünglicher Zweig sauber.
und Sie müssen kein "git reset --hard" durchführen.

P.S. -s Parameter für Commit ist für --signoff

45voto

Ether Punkte 51044

Da Sie noch keine Übertragungen vorgenommen haben, können Sie alle Änderungen im Stash speichern, einen neuen Zweig erstellen und zu diesem wechseln, und diese Änderungen dann wieder in Ihren Arbeitsbaum einfügen:

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list

15voto

Patrick Schaefer Punkte 791

So fügen Sie neue Änderungen zu einem neuen Zweig hinzu und pushen sie an den entfernten Standort:

git branch branch/name
git checkout branch/name
git push origin branch/name

Oft vergesse ich, den Origin-Teil zum Push hinzuzufügen und bin verwirrt, warum ich den neuen Branch/Commit nicht in Bitbucket sehe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X