it-swarm.com.de

Git Zweig von aktuell ausgecheckten Master erstellen?

Es gibt einen git-gesteuerten Ordner auf einem Server, in dem der Hauptzweig ausgecheckt ist und ein ganzer Stapel von Dateien geändert und nicht festgeschrieben wurde. Gibt es eine Möglichkeit für mich, die Änderungen in einem separaten Zweig festzuschreiben, damit ich zu einer sauberen Version zurückkehren kann?

das heißt, ich möchte alle Änderungen dieser Person effektiv rückgängig machen, sie aber in einer anderen Chance speichern. Wenn diese Person ihre Änderungen wünscht, kann sie zu diesem Zweig wechseln.

(Ja, ich weiß, dass git so nicht funktioniert, aber das ist meine Situation!) Alle Ideen werden sehr geschätzt.

76
corydoras

Zuallererst wird das Verschieben in einen anderen Zweig basierend auf dem aktuellen HEAD wie folgt ausgeführt:

git checkout -b newbranch

Übernehmen Sie alle Änderungen (unter der Annahme, dass keine neuen Dateien hinzugefügt wurden, andernfalls git add Sie):

git commit -a

Gehen Sie zurück zum Hauptzweig:

git checkout master

Die zuvor nicht festgeschriebenen Änderungen befinden sich alle in der Zweigstelle newbranch, und der Master befindet sich immer noch in dem Zustand, in dem er sich ohne diese Änderungen befunden hat.

134
CB Bailey

Diese Methode ist nützlich:

git checkout -B <new_branch> <start point>

Woher:

  • <new_branch> Ist Ihr neuer Zweig (z. B. my_branch)
  • <start point> Ist Ihr Startzweig (master in Ihrem Fall)
  • -B Erstellt eine neue Verzweigung ab <start point>. Wenn sie bereits vorhanden ist, setzen Sie sie auf zurück (dies wird nicht als -b Fehlschlagen, wenn die Verzweigung bereits vorhanden ist).
  • manchmal kann -m nützlich sein, um beim Wechseln zwischen Zweigen eine Dreifachzusammenführung zwischen dem aktuellen Zweig und dem Inhalt Ihres Arbeitsbaums durchzuführen (nützlich für Skripterstellung).

Siehe: man git-checkout Für weitere Details.

14
kenorb

Sie können Ihre Änderungen jederzeit verwahren.

git stash
git checkout -b bravenewmaster
git stash apply

Denken Sie auch daran, dass Sie diesen Zweig immer zurückschieben können, wenn Sie einen Commit für den "falschen" Zweig ausführen, da der Zweig nichts anderes als ein Zeiger auf einen Commit ist.