Wenn ich eine markierte Version meines Quellcodes auschecke, ohne eine Verzweigung zu erstellen, zeigt Git an, dass ich überhaupt keiner Verzweigung zugeordnet bin. Es ist schön, mich Änderungen vornehmen zu lassen und sie zu überprüfen. Wohin gehen diese Änderungen? Wenn ich zurück zum "Master" wechsle, verschwinden sie (überschrieben mit dem, was Master war) und ich kann sie nicht mehr finden. Was gibt? Wenn Git mich Änderungen gegen einen im Wesentlichen anonymen Zweig vornimmt, kann ich sie sicher zurückholen?Git Commit gegen Tag ohne Verzweigung
Antwort
Weil Ihr begehen ist nicht auf jedem Zweig, Sie es nicht im Arbeitsverzeichnis sehen, es sei denn Sie Prüfung, dass bestimmte verpflichten mit seinem SHA1. Sie können die Festschreibung finden, indem Sie sich die reflog
ansehen, die Änderungen in dem verfolgt, was Sie aus dem Repo ausgecheckt haben.
$ git reflog
7a30fd7... [email protected]{0}: checkout: moving from master to XXX
ddf751d... [email protected]{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
96c3b03... [email protected]{2}: commit: example commit on tag XXX, not on any branch
7a30fd7... [email protected]{3}: checkout: moving from master to XXX
, dass Sie die SHA1 erzählt, dass Sie checkout
haben, um würde zu Ihrem begehen im Arbeitsverzeichnis zu sehen: Wenn Ihr Tag XXX
war werden Sie so etwas wie zu sehen.
$ git checkout 96c3b03
Note: moving to "96c3b03" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
$ git checkout -b newbranch
$ git branch #lists all branches
feature1
master
* newbranch
schien Dies alles ein wenig seltsam auf den ersten mir, bis ich, dass git checkout
Orte alle Dateien Projekt realisiert als eines in mein Dateisystem (Arbeitsverzeichnis) insbesondere begehen. Das Arbeitsverzeichnis fungiert als Browser im lokalen Git-Repository. Ihre Änderungen wurden nicht in dem Repository überschrieben, sie werden nur nicht in Ihrem Arbeitsverzeichnis angezeigt, wenn Sie den Master ausgecheckt haben.
Ja, sie werden in Reflogs sein.
Sie können die Filiale jederzeit wie folgt nennen:
git checkout -b my-branch-name
die zweite Frage beantworten Sie git reset --hard yourtagname
Als für das, was Sie auf dem gleichen Zweig im Wesentlichen gegabelte Ihre Branche passieren würde, an dem Tag-Namen verwenden würden, und blieben. Deine Verpflichtungen in der alten Gabel sind immer noch da ... sie sind nur schwer zu sehen. Möglicherweise müssen Sie den Reflog verwenden, um die alte Verzweigung zu finden.
Alternativ können Sie das ohne einen neuen Zweig zurück in Master fusionieren begehen, indem er seine SHA1 zu finden (git reflog wie oben) und dann:
git checkout master
git merge SHA1
Note to self: Dann 'git checkout master' tun, 'git merge newbranch',' git branch -d newbranch' und 'git push'. – Znarkus
Oder noch einfacher, ohne eine Verzweigung zu erstellen: 'git checkout master' und dann' git merge 96c3b03' (ersetzen durch die korrekte SHA1 gefunden durch 'git reflog') (wie die Lösung von [gjvis bellow] (http://stackoverflow.com)/a/8760749/535203)) –