Frage Warum kann git Hard / Soft-Reset nicht per Pfad durchführen?


$ git reset -- <file_path> kann nach Pfad zurückgesetzt werden.

Jedoch, $ git reset (--hard|--soft) <file_path> wird einen Fehler wie folgt melden:

Cannot do hard|soft reset with paths.

93
2018-06-26 04:36


Ursprung


Antworten:


Weil es keinen Sinn macht (andere Befehle stellen diese Funktionalität bereits bereit), und es reduziert die Möglichkeit, versehentlich das Falsche zu tun.

Ein "Hard Reset" für einen Pfad ist nur mit erledigt git checkout HEAD -- <path> (Auschecken der vorhandenen Version der Datei).

Ein Soft-Reset für einen Pfad ist nicht sinnvoll.

Ein gemischter Reset für einen Pfad ist was git reset -- <path> tut.


98
2018-06-26 04:39



Sie können erreichen, was Sie versuchen zu verwenden git checkout HEAD <path>.

Das heißt, die angegebene Fehlermeldung macht für mich keinen Sinn (wie git reset funktioniert gut auf Unterverzeichnissen), und ich sehe keinen Grund, warum git reset --hard sollte nicht genau das tun, was du von ihm verlangst.


14
2017-12-22 21:30



Die Frage Wie ist schon antworteteIch werde das erklären Warum Teil.

Also, was macht Git zurückgesetzt machen? Abhängig von den angegebenen Parametern kann es zwei verschiedene Dinge tun:

  • Wenn Sie einen Pfad angeben, ersetzt er die übereinstimmenden Dateien im Index durch die Dateien eines Commits (standardmäßig HEAD). Diese Aktion beeinflusst den Arbeitsbaum überhaupt nicht und wird normalerweise als das Gegenteil von Git Add verwendet.

  • Wenn Sie keinen Pfad angeben, verschiebt er den aktuellen Zweigkopf zu einem angegebenen Commit und zusammen damit, setzt optional den Index und den Arbeitsbaum auf den Status dieses Commits zurück. Dies zusätzlich Das Verhalten wird durch den mode-Parameter gesteuert:
    --weich: Berühren Sie nicht den Index und den Arbeitsbaum.
    --gemischt (Standard): Setzen Sie den Index, aber nicht den Arbeitsbaum zurück.
    --hart: Setzen Sie den Index und den Arbeitsbaum zurück.
    Es gibt auch andere Optionen, siehe die Dokumentation für die vollständige Liste und einige Anwendungsfälle.

    Wenn Sie kein Commit angeben, wird standardmäßig HEAD verwendet git reset --soft wird nichts tun, da es ein Befehl ist, den Kopf zu HEAD (in seinen aktuellen Zustand) zu bewegen. git reset --hardAuf der anderen Seite macht Sinn aufgrund seiner Nebenwirkungensagt es, den Kopf nach HEAD bewegen und Setzen Sie den Index und den Arbeitsbaum auf HEAD zurück.

    Ich denke, es sollte jetzt klar sein, warum diese Operation nicht für bestimmte Dateien von Natur aus ist - es ist beabsichtigt, einen Zweigkopf an erster Stelle zu bewegen, den Arbeitsbaum zurückzusetzen und der Index ist eine sekundäre Funktionalität.


2
2017-09-20 18:23



git reset --soft HEAD ~ 1 Dateiname rückgängig machen, aber Änderungen bleiben lokal. Dateiname könnte sein - für alle commited dateien


-1
2017-08-25 21:21