5683 Stimmen

Zurücksetzen des Zweigs des lokalen Repositorys auf den des entfernten Repositorys HEAD

Wie setze ich meinen lokalen Zweig so zurück, dass er mit dem Zweig des entfernten Repositorys übereinstimmt?

Das habe ich:

git reset --hard HEAD

Aber wenn ich eine git status ,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Können Sie mir bitte sagen, warum ich sie "geändert" habe? Ich habe diese Dateien nicht angefasst? Wenn ja, möchte ich sie entfernen.

18 Stimmen

Gemäß der Ausgabe von git status Ihr zweiter Befehl git reset --hard HEAD gescheitert. Allerdings haben Sie die Ausgabe nicht eingefügt. Unvollständige Frage.

5 Stimmen

Sie vermischen hier zwei Themen: 1) wie man eine lokale Verzweigung auf den Punkt zurücksetzt, an dem sich die entfernte Verzweigung befindet, und 2) wie man den Staging-Bereich (und möglicherweise das Arbeitsverzeichnis) löscht, so dass git status sagt nothing to commit, working directory clean . - Bitte angeben!

3 Stimmen

9735voto

Dan Moulding Punkte 195982

Das Einstellen des eigenen Zweigs auf den entfernten Zweig kann in zwei Schritten erfolgen:

git fetch origin
git reset --hard origin/master

Wenn Sie den Zustand der aktuellen Verzweigung vorher speichern wollen (nur für den Fall), können Sie das tun:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Jetzt ist Ihre Arbeit auf dem Zweig "my-saved-work" gespeichert, falls Sie sie zurückhaben wollen (oder sie später ansehen oder mit Ihrem aktualisierten Zweig vergleichen wollen).

Beachten Sie, dass das erste Beispiel davon ausgeht, dass das entfernte Projektarchiv den Namen "origin" trägt und dass der Zweig mit dem Namen "master" im entfernten Projektarchiv dem aktuell ausgecheckten Zweig in Ihrem lokalen Projektarchiv entspricht.

Übrigens sieht die Situation, in der Sie sich befinden, sehr nach einem häufigen Fall aus, in dem ein Push in den aktuell ausgecheckten Zweig eines nicht-bare Repositorys durchgeführt wurde. Haben Sie kürzlich in Ihr lokales Repository gepusht? Wenn nicht, dann ist das kein Grund zur Sorge - irgendetwas anderes muss dazu geführt haben, dass diese Dateien unerwartet verändert wurden. Andernfalls sollten Sie sich darüber im Klaren sein, dass es nicht empfehlenswert ist, in ein Nicht-Bare-Repository zu pushen (und insbesondere nicht in den aktuell ausgecheckten Zweig).

642voto

Akavall Punkte 75208

Ich musste etwas tun (die Lösung in der akzeptierten Antwort):

git fetch origin
git reset --hard origin/master

Gefolgt von:

git clean -f

zum Entfernen lokaler Dateien

Um zu sehen, welche Dateien entfernt werden (ohne sie tatsächlich zu entfernen):

git clean -n -f

636voto

Asclepius Punkte 48774

Erstens, verwenden Sie Git-Reset auf den zuvor abgerufenen HEAD des entsprechenden vorgelagerten Zweigs:

git reset --hard @{u}

Der Vorteil der Angabe von @{u} oder seine ausführliche Form @{upstream} ist, dass der Name des entfernten Projektarchivs und der Zweig nicht explizit angegeben werden müssen. Unter Windows oder mit der PowerShell, geben Sie "@{u}" (mit doppelten Anführungszeichen).

Als Nächstes, je nach Bedarf, verwenden Sie Korkenzieher um nicht verfolgte Dateien zu entfernen, optional auch mit -x :

git clean -df

Und schließlich, je nach Bedarf, holen Sie sich die neuesten Änderungen:

git pull

213voto

Mikael Ohlson Punkte 2592

git reset --hard HEAD tatsächlich nur auf den letzten bestätigten Zustand zurückgesetzt. In diesem Fall bezieht sich HEAD auf den HEAD Ihres Zweigs.

Wenn Sie mehrere Übertragungen haben, wird dies nicht funktionieren.

Was Sie wahrscheinlich tun wollen, ist, auf den Kopf des Ursprungs oder wie auch immer Ihr entferntes Repository genannt wird, zurückzusetzen. Ich würde wahrscheinlich etwas tun wie

git reset --hard origin/HEAD

Aber seien Sie vorsichtig. Hardresets können nicht einfach rückgängig gemacht werden. Es ist besser, so zu verfahren, wie Dan vorschlägt, und vor dem Zurücksetzen eine Kopie Ihrer Änderungen abzuzweigen.

102voto

Christopher Smith Punkte 5151

Alle oben genannten Vorschläge sind richtig, aber oft zu vraiment Wenn Sie Ihr Projekt zurücksetzen, müssen Sie auch alle Dateien entfernen, die sich in Ihrem .gitignore .

Um das moralische Äquivalent zu erhalten Ihr Projektverzeichnis löschen und neu klonen von der Fernbedienung ist:

git fetch
git reset --hard
git clean -x -d -f

Warnung : git clean -x -d -f es unumkehrbar und Sie können Dateien und Daten verlieren (z. B. Dinge, die Sie bei der .gitignore ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X