Nicht festgeschriebene Änderungen bei Master in einen neuen Zweig von Git einfügen


Antworten:


151

Sie können einfach zum Testzweig auschecken und dann festschreiben. Sie verlieren Ihre nicht festgeschriebenen Änderungen nicht, wenn Sie in einen anderen Zweig wechseln.

Angenommen, Sie befinden sich in der Hauptniederlassung:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Ich bin mir über die gelöschten Dateien nicht sicher, aber ich denke, sie sind nicht enthalten, wenn Sie sie verwenden git add .


12
Manchmal schlägt das Auschecken fehl, weil Ihre Änderungen mit diesem Zweig in Konflikt stehen. Sie können die Kasse -m zum Zusammenführen versuchen.
Jouni K. Seppänen

2
Ich habe dies versucht, aber ich habe eine Fehlermeldung erhalten: Fehler: Ihre lokalen Änderungen an den folgenden Dateien werden beim Auschecken überschrieben. Bitte übernehmen Sie Ihre Änderungen oder speichern Sie sie, bevor Sie die Zweige wechseln können.
ishwr

Während dies funktioniert, sollte die Antwort IMO bevorzugt werden. Vielleicht nur eine persönliche Wahl, aber es ist logischerweise ein sauberer Workflow und führt STASH ein, was ein nützlicher Befehl ist.
Patrick

Die Option "-b" fehlt, da die Überschrift darauf hinweist, dass es sich um einen "neuen" Zweig handelt.
Guntram

195

Sie können auch einen neuen Zweig erstellen und zu diesem wechseln, indem Sie Folgendes tun:

git checkout -b new_branch
git add .

Ich benutze dies die ganze Zeit, weil ich immer vergesse, einen neuen Zweig zu starten, bevor ich mit der Bearbeitung von Code beginne.


3
Das gleiche Problem wie bei @jouni für die andere Antwort - Sie können Schwierigkeiten haben, den Zweig wieder mit dem Master zusammenzuführen, wenn zusätzliche Änderungen mit den ursprünglichen Änderungen in Konflikt stehen. IMO dieser Thread beantwortet die Frage besser: stackoverflow.com/questions/556923/…
jpw

Kurz, süß und beruhigend ... "Ich benutze das die ganze Zeit ..."
17οδεMεδιϲ

1
Vergessen Sie nicht, in der new_branch ein Commit durchzuführen. Wenn Sie zum Hauptzweig zurückkehren und geänderte Dateien zurücksetzen, verlieren Sie sie auch in der new_branch.
Petrsyn

36

Warum nicht einfach Git Stash verwenden? Ich denke, es ist intuitiver wie das Kopieren und Einfügen.

$ git branch
  develop
* master
  feature1
  TEST
$

Sie haben einige Dateien in Ihrem aktuellen Zweig, die Sie verschieben möchten.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Wechseln Sie zum anderen Zweig.

$ git checkout TEST

Und bewerben

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Ich mag es auch, git stashweil ich benutze git flow, was sich beschwert, wenn Sie einen Feature-Zweig beenden möchten, während sich noch Änderungen in Ihrem Arbeitsverzeichnis befinden.

Genau wie bei @Mike Bethany passiert mir das die ganze Zeit, weil ich an einem neuen Problem arbeite und vergesse, dass ich mich noch in einem anderen Zweig befinde. So können Sie Ihre Arbeit verstauengit flow feature finish... und git stash applyin einen neuen git flow feature start ...Zweig wechseln .


2
git stashist meine bevorzugte Art, mit nicht festgeschriebenen Änderungen umzugehen. Es ist sicherlich eine intuitive Methode, wenn Sie es als Ausschneiden und Einfügen betrachten.
Matthew Mitchell

Dies scheint mir ein guter Ansatz zu sein. Es hat problemlos funktioniert.
Yunus Nedim Mehel

Ich wusste nicht, dass du das kannst und es hat gut funktioniert. Fühlt sich etwas intuitiver an als die anderen Methoden.
Glaukon

Ich denke, es ist professioneller zu verstauen, anstatt Git Checkout zu verwenden und dann hinzuzufügen. Ich denke, Ihre Antwort sollte 100+ Stimmen sein.
Matrosov Alexander

1
@ Καrτhικgit stash --include-untracked
2Toad

5
git checkout TEST
git add file1 file2
git commit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.