Git Stash Änderungen gelten für neue Filiale?

347

Ich habe an der Hauptniederlassung gearbeitet, einige Änderungen vorgenommen und sie dann verstaut. Jetzt ist mein Meister bei HEAD.

Aber jetzt möchte ich diese Änderungen abrufen, aber zu einem neuen Zweig, der von der HEAD-Version des Hauptzweigs verzweigt.

Wie mache ich das ?

Yash Desai
quelle
3
Ich denke du suchst das? stackoverflow.com/questions/556923/…
zx1986

Antworten:

502

Funktioniert das Standardverfahren nicht?

  • Änderungen vornehmen
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Kürzere:

  • Änderungen vornehmen
  • git stash
  • git checkout -b xxx
  • git stash pop
Andrejs Cainikovs
quelle
8
@sfletche Wenn Sie Ihren Stash benennen möchten, müssen Sie git stash save <Name> ausführen. Andernfalls ist es, wie Sie sagen, dasselbe wie git stash.
SgtPooki
5
Nach Verwendung dieses Ansatzes scheinen die versteckten Änderungen zurückgekehrt zu sein, wenn Sie zum vorherigen Zweig zurückkehren. Ist es möglich, nur die versteckten Änderungen in der neuen Filiale zu haben?
Thomas Higginbotham
Übernehmen Sie einfach Ihre Änderungen in den neuen Zweig.
ChrisR
2
@ThomasHigginbotham nein, das Arbeitsverzeichnis ist für Zweige gleich und wird von einem zum anderen kopiert, wenn Sie von einem Zweig zum anderen wechseln. Um das zu "erreichen", was Sie wollen, mache ich normalerweise verschiedene Verstecke und füge mit dem git stash save "description"zuvor erwähnten Befehl eine nützliche Beschreibung hinzu . und dann ich git clearden Zweig (um das eigentliche Arbeitsverzeichnis zu verwerfen) und dann git stash apply stash@{my_desired_stash}in den gewünschten Zweig (nachdem ich mit git checkout <branch>offensichtlich zu diesem gewechselt habe). Ich weiß, dass es keine echte Lösung ist, aber das Beste, was man mit Git machen kann .
Kamafeather
Ich finalisiert dies auch mit , git stash dropwenn ich begangen hatte
oddmeter
221

Da Sie Ihre Änderungen bereits gespeichert haben, benötigen Sie lediglich diesen Einzeiler:

  • git stash branch <branchname> [<stash>]

Aus den Dokumenten ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html) ):

Erstellt und checkt einen neuen Zweig mit dem Namen < Zweigname > ab dem Commit aus, bei dem der < Stash > ursprünglich erstellt wurde, und wendet die in < Stash > aufgezeichneten Änderungen auf den neuen Arbeitsbaum und Index an. Wenn dies erfolgreich ist und < Stash > eine Referenz des Formulars Stash @ {< Revision >} ist, wird das < Stash > gelöscht . Wenn nein < Stash > angegeben ist, wird der neueste angewendet.

Dies ist nützlich, wenn der Zweig, in dem Sie git stash save ausgeführt haben, so geändert wurde, dass die Anwendung von git stash aufgrund von Konflikten fehlschlägt. Da der Stash zusätzlich zu dem Commit angewendet wird, der zum Zeitpunkt der Ausführung von git stash HEAD war, wird der ursprünglich gestaute Status ohne Konflikte wiederhergestellt.

Rodney Golpe
quelle
3
Für einzelne Verstecke ist dies der richtige Weg. Die Stash-Namensreferenz ist nicht erforderlich, da Git den neuesten Stash anwendet, zu einem neuen Zweig wechselt und Stash in 1 Befehl anwendet.
sinisterOrange
@RodneyGolpe Dies scheint auch das Versteck auf 'Master' anzuwenden? Was ich tun möchte, ist, von 'master', git stash, dann hätte ich erwartet, dass 'git stash branch [branchname] den stash auf einen neuen Zweig anwendet und den Master ohne die Änderungen belässt?
David Doria
2
@DavidDoria Sie müssen die Änderungen in Ihrem neuen Zweig festschreiben, bevor Sie zum Master zurückkehren können.
Rodney Golpe
Nun, das hat auch die Änderungen zum Master gemacht ... Ich bin wirklich ratlos ... offensichtlich verstehe ich Git immer noch nicht wirklich. Nach dem Soft-Resetting des Masters und dem Ziehen aus dem Remote-Repo bin ich jetzt dort, wo ich sein wollte. Der Master befindet sich vor den Änderungen im Status. Der neue Zweig enthält die Änderungen.
Ekkstein
1

Wenn Sie einige Änderungen an Ihrem Arbeitsbereich vorgenommen haben und diese in einem neuen Zweig speichern möchten, verwenden Sie diesen Befehl:

git stash branch branchName

Es wird machen:

  1. eine neue Niederlassung
  2. Verschieben Sie Änderungen in diesen Zweig
  3. und entfernen Sie den neuesten Stash (wie: git stash pop)
Hamed Yarandi
quelle