Wie lokale Commits in Git zu verwerfen?
Frage
Ich hatte an etwas arbeiten, und beschlossen, es vollständig aufgeschraubt wurde ... nach etwas davon begangen zu haben. Also habe ich versucht, die folgende Sequenz:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
an welcher Stelle ich bekam die Nachricht
Your branch is ahead of 'origin/master' by 2 commits.
Ich möchte, dass meine lokalen Commits verwerfen , ohne dass mein lokales Verzeichnis und alles wiederholten-auszulöschen. Wie kann ich das erreichen?
Lösung
git reset --hard origin/master
werden alle Commits nicht in origin/master
entfernen, wo origin
der Name Repo ist und master
ist der Name der Branche.
Andere Tipps
Als Nebenwirkung, abgesehen von der Antwort von mipadi (die übrigens funktionieren sollte), dann sollten Sie wissen, dass zu tun:
git branch -D master
git checkout master
auch genau das tut, was Sie ohne having to redownload everything
wollen (Ihr Zitat umschrieben). Das ist, weil Ihr lokales Repo eine Kopie der Remote-Repo enthält (und diese Kopie ist nicht das gleiche wie Ihr lokales Verzeichnis, es nicht einmal das gleiche wie Ihr ausgecheckt Zweig ist).
einen Zweig aus Abwischen ist vollkommen sicher und diesen Zweig zu rekonstruieren ist sehr schnell und beinhaltet keinen Netzwerkverkehr. Denken Sie daran, git ist in erster Linie eine lokale Repo durch Design. Auch entfernte Zweige haben eine Kopie auf dem lokalen. Es gibt nur ein bisschen von Metadaten, die git sagt, dass eine bestimmte lokale Kopie ist eigentlich ein Remote-Zweig. In git, alle Dateien auf der Festplatte die ganze Zeit.
Wenn Sie haben noch keine Zweige außer Master, sollten Sie:
git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
Was ich tue, ist ich versuche schwer zu HEAD zurücksetzen. Dies wird auszulöschen alle lokalen Commits:
git reset --hard HEAD^
Sie müssen laufen
git fetch
Um alle Änderungen zu erhalten und dann werden Sie nicht erhalten eine Nachricht mit „Ihrer Branche voraus ist“.
Ich habe Fälle gesehen, wo die Fern synchron wurde und Bedarf aktualisiert werden. Wenn ein reset --hard
oder ein branch -D
zu arbeiten scheitern, versuchen
git pull origin
git reset --hard
hatte ich eine tun:
git checkout -b master
als git sagte, dass es nicht existiert, weil es mit dem
wischen gewesengit -D master