Git-Zweig vom aktuellen ausgecheckten Master erstellen?

Lesezeit: 4 Minuten

Benutzer-Avatar
Corydoras

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, die Änderungen in einen separaten Zweig zu übertragen, 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, damit diese Person, wenn sie ihre Änderungen wünscht, zu diesem Zweig wechseln kann.

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

  • ähnlich wie . und hey, git funktioniert in deinem fall sehr gut, ich würde nicht sagen, dass es nicht für einen solchen arbeitsablauf ausgelegt ist. es ist!

    – Strickl

    21. September 2009 um 7:09 Uhr

  • Nur zur Klarstellung, ich gehe davon aus, dass die Änderungen niemals verwendet werden, aber ich brauche für alle Fälle eine dauerhafte Aufzeichnung.

    – Corydoras

    21. September 2009 um 8:30 Uhr

Zunächst einmal wird der Wechsel zu einem anderen Zweig basierend auf dem aktuellen HEAD wie folgt durchgeführt:

git checkout -b newbranch

Übernehmen Sie alle Änderungen (unter der Annahme, dass keine neu hinzugefügten Dateien vorhanden sind, andernfalls git add Sie):

git commit -a

Gehen Sie zurück zum Master-Zweig:

git checkout master

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

  • Erläuterung: Inhalte des Arbeits-Repositorys und bereitgestellte Änderungen gehören zu keinem Zweig. Das einfache Erstellen eines neuen Zweigs von HEAD (letzte Revision) reicht aus, damit der neue Commit in den gerade erstellten Zweig geht <newbranch>.

    – Jakub Narębski

    21. September 2009 um 7:52 Uhr

  • Danke Leute, ich dachte, der Wechsel zu einem neuen Zweig könnte die Änderungen zunichte machen. Da ich aus einem SVN-Hintergrund komme, hätte ich nicht gedacht, dass ein solcher Wechsel möglich ist. Teste es jetzt aus.

    – Corydoras

    21. September 2009 um 8:29 Uhr

Sie können Ihre Änderungen jederzeit speichern.

git stash
git checkout -b bravenewmaster
git stash apply

Denken Sie auch daran, dass Sie, wenn Sie auf den “falschen” Zweig festschreiben, diesen Zweig jederzeit zurückverschieben können, da der Zweig nichts anderes als ein Zeiger auf einen Commit ist.

  • Warum sollten Sie sich die Mühe machen, zu speichern, wenn Sie die gleichen Änderungen sofort erneut anwenden werden? Du kannst es genauso gut tun git checkout -b bravenewmaster. Es erfordert weniger Tipparbeit und berührt nicht unnötigerweise alle geänderten Dateien.

    – CB Bailey

    21. September 2009 um 6:54 Uhr

  • Nun, ich habe es nicht versucht, aber ich bin davon ausgegangen git aus welchen Gründen auch immer nicht zulassen git checkout -b wenn es Änderungen gibt. Ansonsten warum fragen? 😉

    – Michael Krelin – Hacker

    21. September 2009 um 7:03 Uhr

  • Eigentlich, für das, was ich sagen kann durch “Ich möchte alle Änderungen dieser Person effektiv rückgängig machen, aber sie in einer anderen Chance speichern, damit diese Person, wenn sie ihre Änderungen haben möchte, zu diesem Zweig wechseln kann”, sollte das Verstauen allein ohne Verzweigung und Anwendung ausreichen .

    – Michael Krelin – Hacker

    21. September 2009 um 7:05 Uhr

  • Wenn er die Änderungen speichert (anstatt sie vorübergehend zu “stashen”), dann ist es wahrscheinlich angemessener, einen Commit (mit einer Nachricht) auf einem benannten Zweig zu haben als einen Stash, der nicht versehentlich gelöscht werden darf. Beides würde aber funktionieren.

    – CB Bailey

    21. September 2009 um 7:15 Uhr

  • Natürlich kann ich die Absichten anderer Leute nicht ganz verstehen, aber ich habe das Gefühl, dass “ich an dieser Instanz arbeiten möchte, aber Sie haben sie verdammt noch mal modifiziert, würden Sie bitte ausweichen und sich später selbst darum kümmern” 😉

    – Michael Krelin – Hacker

    21. September 2009 um 7:24 Uhr

Diese Methode ist nützlich:

git checkout -B <new_branch> <start point>

Wo:

  • <new_branch> ist Ihre neue Filiale (zB my_branch)
  • <start point> ist Ihr Startzweig (master in Ihrem Fall)
  • -B erstellt neuen Zweig ab <start point>wenn es bereits vorhanden ist, setzen Sie es auf (es wird nicht fehlschlagen, da -b wenn Zweig bereits vorhanden ist)
  • manchmal -m kann nützlich sein, wenn Sie beim Wechseln von Zweigen angeben, dass dies eine Drei-Wege-Zusammenführung zwischen dem aktuellen Zweig und Ihrem Arbeitsbauminhalt durchführt (nützlich für Skripterstellung).

Sehen: man git-checkout für mehr Details.

1314390cookie-checkGit-Zweig vom aktuellen ausgecheckten Master erstellen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy