Ich hatte an etwas gearbeitet und festgestellt, dass es komplett durcheinander war ... nachdem ich etwas davon begangen hatte. Also habe ich folgende Sequenz ausprobiert:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
An diesem Punkt bekam ich die Nachricht
Your branch is ahead of 'origin/master' by 2 commits.
Ich möchte meine lokalen Commits verwerfen , ohne mein lokales Verzeichnis löschen und alles erneut herunterladen zu müssen. Wie kann ich das erreichen?
git fetch
undgit pull
- Pull ist eine Kombination aus Abrufen und Zusammenführen.Antworten:
alle Commits nicht entfernen ,
origin/master
woorigin
ist der Repo - Name undmaster
der Name der Branche.quelle
origin/master
ist ein Zweig, der denmaster
Zweig desorigin
Remote-Repos verfolgt.origin/master
ist ein Verweis auf denmaster
Zweig der Fernbedienung namensorigin
.Abgesehen von der Antwort von Mipadi (die übrigens funktionieren sollte) sollten Sie wissen, dass Sie Folgendes tun:
macht auch genau das, was Sie wollen
having to redownload everything
(Ihr Zitat umschrieben). Dies liegt daran, dass Ihr lokales Repo eine Kopie des Remote-Repos enthält (und diese Kopie nicht mit Ihrem lokalen Verzeichnis identisch ist, sondern auch nicht mit Ihrem ausgecheckten Zweig).Das Löschen eines Zweigs ist absolut sicher und die Rekonstruktion dieses Zweigs ist sehr schnell und erfordert keinen Netzwerkverkehr. Denken Sie daran, Git ist in erster Linie ein lokales Repo. Sogar entfernte Filialen haben eine Kopie auf der lokalen. Es gibt nur wenige Metadaten, die git mitteilen, dass eine bestimmte lokale Kopie tatsächlich ein Remote-Zweig ist. In Git befinden sich alle Dateien ständig auf Ihrer Festplatte.
Wenn Sie keine anderen Zweige als Master haben, sollten Sie:
quelle
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
sich dies auf Ihrem lokalen Computer befindet. Das ist Ihre lokale (vollständige) Kopie des Remote-Zweigs. Der eigentliche Remote-Zweig istorigin master
.git branch -D master
aber nicht nötig, da es, wie bereits erwähnt, einen Fehler erzeugt.Was ich tue, ist, dass ich versuche, hart auf HEAD zurückzusetzen. Dadurch werden alle lokalen Commits gelöscht:
quelle
^
stellt das übergeordnete Commit dar. Beim Zurücksetzen werdenHEAD^
nicht festgeschriebene Änderungen verworfen und der Zweig zum vorherigen Commit verschoben, wodurch das letzte Commit effektiv "gelöscht" wird (obwohl das Commit noch vorhanden ist, zeigt der Zweig einfach nicht darauf). Die Antwort enthält nur ein lokales Commit und der Rest sind nicht festgeschriebene Änderungen. @karim @giangDu musst rennen
Um alle Änderungen zu erhalten und dann erhalten Sie keine Nachricht mit "Ihre Niederlassung ist voraus".
quelle
Ich habe Fälle gesehen, in denen die Fernbedienung nicht mehr synchron war und aktualisiert werden musste. Wenn a
reset --hard
oder abranch -D
nicht funktioniert, versuchen Sie esquelle
reset --hard
Arbeit in dieser Situationreset --hard
sollte hier funktionieren. Ich möchte jedoch nur darauf hinweisen, dass der Zweig gelegentlich nicht ordnungsgemäß zurückgesetzt werden kann undgit pull origin
die Fernbedienung erneut synchronisiert wird und diereset --hard
Funktion ordnungsgemäß funktioniert.Ich musste machen:
wie git sagte, dass es nicht existiert, weil es mit dem abgewischt wurde
quelle