Ich habe vor ungefähr einem Monat ein Remote-Git-Repository geklont. Das Remote-Repository hat viele Änderungen erfahren und ist jetzt instabil geworden. Jetzt brauche ich eine weitere Kopie des Repositorys, deren Version mit der identisch ist, die ich vor einem Monat geklont habe.
Wie mache ich das?
Antworten:
Sie können Ihr Repository auf ein beliebiges Commit "zurücksetzen" (z. B. vor 1 Monat).
Verwenden Sie dazu git-reset :
quelle
master
Zweig zurückgesetzt, der standardmäßig auf einem Klon ausgecheckt ist. Wenn ein anderer Zweig alsmaster
Ihr Hauptentwicklungszweig ist, der zuerst ausgecheckt werden mussgit reset
git checkout -b new_branch hash
wenn Sie einen neuen Zweig basierend auf dem Hash erstellen, ohne einen anderen Zweig zu berühren. Das Verschieben des Kopfes eines vorhandenen Zweigs kann zu Problemen führen, wenn es Zeit ist, etwas auf einen Remote-Server zu übertragen.git pull origin [branch]
gesendet wurde, können Sie es anders machen, afaik, es ist verloren.Sie können einfach verwenden
in dieser Reihenfolge
Commit-Hash sieht folgendermaßen aus: "45ef55ac20ce2389c9180658fdba35f4a663d204"
quelle
git reset --hard
sollte zugunsten von a vermieden werdengit checkout commit-hash
. Agit reset --hard
entfernt einen Teil der Git-Geschichte, was manchmal nicht wünschenswert ist.git init
ist nicht notwendigVerwenden
git log
Sie diese Option, um die Revision zu finden, auf die Sie ein Rollback durchführen möchten, und notieren Sie sich den Commit-Hash. Danach haben Sie 2 Möglichkeiten:Wenn Sie nach dieser Überarbeitung etwas festlegen möchten, empfehle ich Ihnen, in einer neuen Filiale auszuchecken:
git checkout -b <new_branch_name> <hash>
Wenn Sie nicht vorhaben , etwas zu begehen , nachdem diese Revision, können Sie einfach Kasse ohne Zweig:
git checkout <hash>
- Hinweis: das wird das Repository in einem ‚abgelöst HEAD‘ Zustand versetzt, was bedeutet , seine Zeit nicht an einen Zweig befestigt - dann Sie‘ Ich habe einige zusätzliche Arbeit, um neue Commits zu einem tatsächlichen Zweig zusammenzuführen .Beispiel:
Auf diese Weise verlieren Sie keine Informationen und können zu einer neueren Version wechseln, wenn diese stabil ist.
quelle
git checkout develop
wo "Entwickeln" der Name Ihrer Niederlassung ist.Wenn diese Version, die Sie erhalten müssen, entweder ein Zweig oder ein Tag ist, dann:
quelle
Im Gegensatz zu zentralisierten Versionskontrollsystemen klont Git das gesamte Repository, sodass Sie nicht nur die aktuellen Remote-Dateien, sondern den gesamten Verlauf erhalten. Ihr lokales Repository wird all dies enthalten.
Zu diesem Zeitpunkt gab es möglicherweise Tags zum Markieren einer bestimmten Version. Wenn nicht, können Sie sie selbst lokal erstellen. Ein guter Weg, dies zu tun, ist die Verwendung
git log
oder vielleicht visueller mit Tools wiegitk
(vielleichtgitk --all
um alle Zweige und Tags zu sehen). Wenn Sie die Commits-Hashes erkennen können, die zu diesem Zeitpunkt verwendet wurden, können Sie sie mit markierengit tag <hash>
und diese dann in neuen Arbeitskopien auschecken (z. B.git checkout -b new_branch_name tag_name
oder direkt mit dem Hash anstelle des Tag-Namens).quelle
Sie können es so lösen:
wo
sha
zB:85a108ec5d8443626c690a84bc7901195d19c446
Sie können den gewünschten sha mit dem Befehl erhalten:
quelle
uploadpack.allowReachableSHA1InWant
Seit Git 2.5.0 kann diese Konfigurationsvariable auf dem Server aktiviert werden. Hier aktivieren die GitHub-Funktionsanforderung und das GitHub-Commit diese Funktion .
Bitbucket Server hat es seit Version 5.5+ aktiviert .
Verwendung:
quelle
Der von Ihnen benötigte Quellbaum ist weiterhin im Git-Repository verfügbar. Sie benötigen jedoch die SHA1 des Commits, an dem Sie interessiert sind. Ich würde davon ausgehen, dass Sie die SHA1 von dem aktuellen Klon erhalten können, den Sie haben.
Wenn Sie diesen SHA1 erhalten können, können Sie dort einen Zweig / Reset erstellen, um das identische Repository zu erhalten.
Befehle gemäß Ruis Antwort
quelle
git reset
Löst wahrscheinlich Ihr Problem.quelle