1170 Stimmen

Was ist der Unterschied zwischen git reset --mixed, --soft und -hard?

Ich möchte eine Übertragung aufteilen und bin mir nicht sicher, welche Rücksetzoption ich verwenden soll.

Ich habe mir die Seite angesehen Was bedeutet "git reset" im Klartext? aber ich habe gemerkt, dass ich nicht wirklich verstehe, was der Git-Index oder der Staging-Bereich ist, und daher waren die Erklärungen nicht hilfreich.

Auch die Anwendungsfälle für --mixed y --soft sehen für mich in dieser Antwort gleich aus (wenn Sie die Sache in Ordnung bringen und erneut in Angriff nehmen wollen). Kann das jemand noch weiter aufschlüsseln? Mir ist klar --mixed ist wahrscheinlich die beste Lösung, aber ich möchte wissen warum . Und schließlich, was ist mit --hard ?

Kann mir jemand ein Beispiel für einen Arbeitsablauf geben, wie die Auswahl der 3 Optionen erfolgen würde?

2voto

artfulrobot Punkte 19115
  • Alle Arten des Zurücksetzens ändern den HEAD im Repo. Außerdem...
  • git reset --soft <B> verschiebt die Änderungen von Commits, die aus dem Repo entfernt wurden, in den Index und fügt alle Änderungen ein, die dort bereits vorhanden waren.
  • git reset --hard <b> verliert die Änderungen im Arbeitsbaum und den Index.
    Es ist die einzige Möglichkeit, den Arbeitsbaum zu ändern.

diagram supporting text explanation

1voto

CDT Punkte 9207

Mo Ali hat es in einfachen Worten ausgedrückt, und hier ist eine weitere einfache Erklärung:

--soft : zurücksetzen KOPF Zeiger auf vorherige Übertragung

--mixed : --soft + löschen add änderungen

--hard : --mixed + Wiederherstellung von Änderungen in der Arbeitsbaumdatei (VORSICHT

0voto

Via_fx_24 Punkte 99

Ich bin kein Git-Experte und bin gerade erst in dieses Forum gekommen, um es zu verstehen! Daher ist meine Erklärung vielleicht nicht perfekt, sorry dafür. Ich fand alle anderen Antworten hilfreich und werde einfach versuchen, eine andere Perspektive zu geben. Ich werde die Frage ein wenig abändern, da ich denke, dass dies vielleicht die Absicht des Autors war: " Ich bin neu bei Git. Bevor ich Git verwendet habe, habe ich meine Dateien wie folgt umbenannt: main.c, main_1.c, main_2.c, wenn ich größere Änderungen vorgenommen habe, um im Falle von Problemen zurückgehen zu können. Wenn ich also beschloss, zu main_1.c zurückzukehren, war es einfach, und ich behielt auch main_2.c und main_3.c, da ich sie später noch brauchen konnte. Wie kann ich das Gleiche mit Git erreichen? " Für meine Antwort verwende ich hauptsächlich "Bedauern Nummer drei" aus der großartigen Antwort von Matt oben, weil ich auch denke, dass die ursprüngliche Frage lautet: "Was mache ich, wenn ich bei der Verwendung von Git Bedauern empfinde?". Am Anfang ist die Situation so:

A-B-C-D (Master)

  1. Der erste wichtige Punkt ist die Erstellung eines neuen Zweigs : git branch mynewbranch . Dann bekommt man:

A-B-C-D (Master und meinneuerZweig)

  1. Nehmen wir nun an, dass man zu A zurückkehren möchte (3 Commits vorher). Der zweite wichtige Punkt ist die Verwendung des Befehls git reset --hard auch wenn man im Netz lesen kann, dass es gefährlich ist. Ja, es ist gefährlich, aber nur für unbestätigte Änderungen. Der richtige Weg ist also:

Git reset --hard then number of thecommitA

ou

Git reset --hard master~3

Dann erhält man: A (Master) - B - C - D (meinneuerZweig)

Dann ist es möglich, mit der Arbeit fortzufahren und von A (Master) aus zu committen, aber dennoch einen einfachen Zugriff auf die anderen Versionen zu erhalten, indem man auf dem anderen Zweig auscheckt: git checkout mynewbranch . Nehmen wir nun an, dass man vergessen hat, einen neuen Zweig zu erstellen, bevor der Befehl git reset --hard . Ist die Übergabe B, C, D verloren? Nein, aber sie sind nicht in irgendwelchen Zweigen gespeichert. Um sie wieder zu finden, kann man den Befehl : Git Reflog das als "Sicherheitsbefehl" gilt ("im Falle von Problemen, Ruhe bewahren und git reflog verwenden"). Dieser Befehl listet alle Übertragungen auf, auch die, die zu keinem Zweig gehören. Es ist also ein bequemer Weg, um die Commits B, C oder D zu finden.

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