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?

11voto

Suresh Sharma Punkte 1684

Bevor man auf diese drei Optionen eingeht, muss man 3 Dinge verstehen.

1) Geschichte/HEAD

2) Stufe/Index

3) Arbeitsverzeichnis

reset --soft : History geändert, HEAD geändert, Arbeitsverzeichnis wird nicht geändert.

reset --mixed : History geändert, HEAD geändert, Arbeitsverzeichnis geändert mit unstaged Daten.

reset --hard : Historie geändert, HEAD geändert, Arbeitsverzeichnis wird geändert mit Datenverlust.

Es ist immer sicher, mit Git --soft zu arbeiten. Bei komplexen Anforderungen sollte man eine andere Option verwenden.

11voto

Orion Punkte 218

-gemischt vs. -weich vs. -hart:

--mixed:

   Delete changes from the local repository and staging area.

   It won't touch the working directory.

   Possible to revert back changes by using the following commands.

     - git add

     - git commit

   Working tree won't be clean.

--soft:

    Deleted changes only from the local repository.

    It won't touch the staging area and working directory.

    Possible to revert back changes by using the following command.

     - git commit.

    Working tree won't be clean

--hard:

    Deleted changes from everywhere.

    Not possible to revert changes.

    The working tree will be clean.

HINWEIS: Wenn die Übertragungen in das lokale Repository bestätigt werden und diese Übertragungen verworfen werden sollen, können wir verwenden:

 `git reset command`.

Wenn jedoch die Übertragungen an das entfernte Repository bestätigt werden, wird die Verwendung des Befehls reset nicht empfohlen und wir müssen den Befehl revert command um die entfernten Übertragungen zu verwerfen.

2voto

Nesha Zoric Punkte 5358

--soft : Weist Git an, HEAD auf einen anderen Commit zurückzusetzen, so dass der Index und das Arbeitsverzeichnis in keiner Weise verändert werden. Alle Dateien, die zwischen dem ursprünglichen HEAD und dem Commit geändert wurden, werden ausgelagert.

--mixed : Genau wie bei soft wird auch hier HEAD auf eine andere Übergabe zurückgesetzt. Es wird auch der Index zurückgesetzt, während das Arbeitsverzeichnis nicht verändert wird. Alle Änderungen verbleiben im Arbeitsverzeichnis und erscheinen als modifiziert, aber nicht staged.

--hard : Dies setzt alles zurück - es setzt HEAD auf eine andere Übertragung zurück, setzt den Index zurück, um ihn anzupassen, und setzt das Arbeitsverzeichnis zurück, um es ebenfalls anzupassen.

Der Hauptunterschied zwischen --mixed y --soft ist, ob Ihr Index ebenfalls geändert wird oder nicht. Mehr darüber erfahren aquí .

2voto

Vishwas Abhyankar Punkte 396

Der grundlegende Unterschied zwischen den verschiedenen Optionen des Befehls git reset ist der folgende.

  • -weich: Setzt nur den HEAD auf den von Ihnen gewählten Commit zurück. Funktioniert im Grunde genauso wie git checkout, erzeugt aber keinen abgetrennten Head-Status.
  • --mixed (Standardoption): Setzt den HEAD auf den Commit zurück, den Sie in der Historie auswählen, und macht die Änderungen im Index rückgängig.
  • --hart: Setzt den HEAD auf den Commit zurück, den Sie in der History ausgewählt haben, macht die Änderungen im Index rückgängig und macht die Änderungen in Ihrem Arbeitsverzeichnis rückgängig.

2voto

Nickpick Punkte 5609

Eine kurze Antwort auf die Frage, in welchem Zusammenhang die 3 Optionen verwendet werden:

An Beibehaltung der aktuellen Änderungen im Code sondern die Commit-Historie umzuschreiben:

  • soft : Sie können alles auf einmal committen und einen neuen Commit mit einer neuen Beschreibung erstellen (wenn Sie torotise git oder eine der meisten anderen GUIs verwenden, ist dies die richtige Wahl, da Sie immer noch ankreuzen können, welche Dateien Sie in den Commit aufnehmen wollen und auf diese Weise mehrere Commits mit verschiedenen Dateien erstellen können. In Sourcetree würden alle Dateien für den Commit bereitgestellt werden).
  • mixed : Sie müssen die einzelnen Dateien erneut in den Index aufnehmen, bevor Sie Übertragungen vornehmen (in Sourcetree wären alle geänderten Dateien unstaged)

Um tatsächlich Ihre Änderungen verlieren auch im Code:

  • hard : Sie schreiben nicht nur die Geschichte neu, sondern verlieren auch alle Änderungen bis zu dem Punkt, an dem Sie zurückgesetzt haben.

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