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

11voto

Deep Nirmal Punkte 1011

Nur 3 Befehle genügen, damit es funktioniert

git fetch origin
git reset --hard origin/HEAD
git clean -f

9voto

Snowcrash Punkte 73122

Die am besten bewertete Antwort hier hat meinen lokalen Code nicht wie erwartet zurückgesetzt.

  1. Heutzutage ist der Master in der Regel der wichtigste
  2. es macht nichts mit nicht verfolgten Dateien, die Sie vielleicht herumliegen haben

Stattdessen:

  1. Überprüfen Sie den Namen Ihres Standard-Remote-Zweigs (dies ist keine Git-Sache, also überprüfen Sie ihn auf GitHub) und ersetzen Sie main oder master in Schritt 4 unten durch Folgendes

  2. aktuelle Daten speichern git stash -u

  3. Aktualisierung aus der Ferne git fetch origin

  4. auf die entfernte Standardverzweigung zurücksetzen (siehe jedoch Schritt 1 oben) git reset --hard origin/main

8voto

Martin Punkte 1835

Kein noch so großes Zurücksetzen und Bereinigen schien irgendeinen Effekt auf nicht verfolgte und geänderte Dateien in meinem lokalen Git-Repository zu haben (ich habe alle oben genannten Optionen ausprobiert). Meine einzige Lösung dafür war, die lokale Repository zu rm und neu klonen es von der Remote.

Zum Glück hatte ich keine anderen Zweige, um die ich mich kümmerte.

xkcd: Git

8voto

Emil Sit Punkte 21922

Wenn Sie zurückgehen wollen zum HEAD Status sowohl für das Arbeitsverzeichnis als auch für den Index, dann sollten Sie git reset --hard HEAD und nicht an HEAD^ . (Möglicherweise handelt es sich um einen Tippfehler, ebenso wie bei der Verwendung eines einfachen statt eines doppelten Bindestrichs für --hard .)

Was Ihre spezielle Frage betrifft, warum diese Dateien im Status als geändert angezeigt werden, sieht es so aus, als hätten Sie vielleicht einen Soft-Reset statt eines Hard-Resets durchgeführt. Dies führt dazu, dass die Dateien, die in der Datenbank geändert wurden HEAD verpflichten sich, den Eindruck zu erwecken, als seien sie inszeniert, und das ist wahrscheinlich das, was Sie hier sehen.

4voto

sudo Punkte 5055

Die einzige Lösung, die in allen Fällen funktioniert, die ich gesehen habe, ist das Löschen und erneute Klonen. Vielleicht gibt es noch einen anderen Weg, aber bei diesem Weg besteht offensichtlich keine Chance, dass der alte Zustand erhalten bleibt, daher ziehe ich ihn vor. Bash Einzeiler können Sie als Makro setzen, wenn Sie oft Dinge durcheinander in Git:

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* geht davon aus, dass Ihre .git-Dateien nicht beschädigt sind

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