Git-Zweig vom aktuellen ausgecheckten Master erstellen?
Lesezeit: 4 Minuten
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.
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.
13143900cookie-checkGit-Zweig vom aktuellen ausgecheckten Master erstellen?yes
ä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