2017-01-19 2 views
1

Ich hatte Probleme mit meinem Code mit so rollte ich verpflichte zum letzten Rück dieses Befehl:Wo sind Git-Zweige nach dem Hard-Reset?

git reset --hard <7-digit-hash> 

Nun, wenn ich den Befehl „git branch“ -Ausgabe ich meinen aktuellen Zweig nur sehen, nicht meinen Master-Zweig und ein anderer Zweig, den ich hatte. Was ist mit Ihnen passiert? Gibt es eine Möglichkeit, Dinge zu ändern, so dass ich weiterhin alle meine Zweige wie zuvor sehe? Mein Code-Problem verschwindet mit diesem Zweig, auf den ich zurückgekehrt bin, also möchte ich ihn behalten, ihn festschreiben und ihn zurück auf meine Fernbedienung schieben. Was geht hier vor sich? Wie mache ich diese zwei Dinge? Die git-Zweigdokumentation hat nicht wirklich erklärt, was vor sich geht.

Antwort

2

Überprüfen Sie zuerst die Ausgabe von git status und von git branch -avv: das sollte Ihnen mehr Sichtbarkeit in Ihrem aktuellen Zustand geben.

Wenn etwas (Commit, Zweig, Tag) in einem Git-Repo fehlt, überprüfen Sie auch git reflog: Sie sie wieder dorthin kommen würde.

Wenn Sie Ihren aktuellen Zweig ausgecheckt hatten, wurde sein HEAD korrekt auf den von Ihnen erwähnten SHA1 zurückgesetzt, also ist dieser Teil in Ordnung.

+0

Danke. Git Status hat mir nichts nützliches gesagt. Ich habe "git branch -avv" gemacht und konnte meinen lokalen "dev" Zweig (den, an dem ich gerade arbeitete) und remotes/Herkunft/HEAD, dev und master sehen. Ich habe dann "git co master" gemacht, um sicherzustellen, dass mein Meisterzweig (welcher Entwickler ein Abkömmling ist) immer noch da war und er sagte "Zu einem neuen Zweig 'Meister' gewechselt", der mich beunruhigt. Hat Git einen komplett * neuen * Masterzweig erstellt, anstatt zu meinem ursprünglichen Masterzweig zu wechseln? Das wäre wirklich schlimm. Ich will nur dev, das meinen rückgängig gemachten Code hat und dev zurück in meinen ursprünglichen Master fusionieren. – William

+0

@Dave hast du Master oder Herkunft/Master gesehen? Wenn Sie einen lokalen Master-Zweig hatten, würden Sie ihn immer noch in git reflog sehen. – VonC

+0

@Dave Es klingt, als hättest du deine lokale Kopie von 'Master' irgendwie gelöscht. Wenn Sie "git co master" erstellt haben, haben Sie einen neuen lokalen Zweig mit dem Namen "master" erstellt, der sich am gleichen Ort wie "origin/master" befindet, der als "remote tracking branch" bezeichnet wird. Mit anderen Worten, es ist eine lokale Kopie von "Master" in Ihrem Remote-Repository. Wenn Sie einen 'git push' gemacht haben, bevor Sie Ihren lokalen' master'-Zweig gelöscht haben, dann ist 'origin/master' gleichzeitig Commit wie' master'. Sie können 'git log --all --oneline --decorate' verwenden, um zu sehen, wo sich jeder Zweig befindet. –

2

git reset betrifft nur den aktuellen Zweig. Selbst dann bewegt es sich nur in der Branche. Es wird nicht gelöscht. Es wird auch keine anderen Zweige löschen.

Irgendwie löschte Sie lokale Kopie von master mit einem anderen Befehl. Wenn Sie git co master erstellt haben, haben Sie einen neuen lokalen Zweig mit dem Namen master erstellt, der sich am gleichen Speicherort wie origin/master befindet. Um die Zweige unter origin/ zu verstehen, müssen Sie mehr über sogenannte "Remote-Tracking-Zweige" erfahren. Dies sind lokale Kopien der Zweige in einem Remote-Repository. Beachten Sie, dass es sich um lokale Kopien handelt. Sie werden aktualisiert, wenn Sie Befehle ausführen, die mit der Fernbedienung interagieren, z. B. git push, git pull oder git fetch.

Wenn Sie eine git push vor dem Löschen Ihrer lokalen master Zweig, dann origin/master ist gleichzeitig Commit als master. Sie können git log --all --oneline --decorate verwenden, um zu sehen, wo jeder Zweig ist. Dies wird Ihnen helfen zu wissen, ob master wieder bei der korrekten Festschreibung ist. Da dev Ihrem ursprünglichen master bereits voraus war, enthält es alle Commits. Wenn Sie master verschieben möchten, können Sie dazu git checkout master und git reset --hard <SHA1> verwenden.