Das Verwendungsszenario sieht wie folgt aus: Im Entwicklungsprojekt wurde eine Funktion in der ersten Version geschrieben, aber während des Versionsiterationsprozesses wurde die Funktion gelöscht, was bedeutet, dass der Kerncode der Funktion gelöscht wird. Dieser Teil der Code wurde bereits übermittelt an Wenn Sie bereits ein lokales Lager haben, wie löschen Sie den im lokalen Lager aufgezeichneten Code?
Viele Leute werden zunächst daran denken, den lokalen Code direkt zu löschen, ihn einzureichen und ihn dann zu pushen. Ist das jedoch machbar?
Experiment
首先将一个项目代码提交到本地仓库,再推送到远程分支,如下图:
项目路径是`app/customer/cmd/rpc/internal/logic`
包含了如下的文件:
本地仓库和远程仓库是一致的
项目中使用`git ls-files -c`命令查看本地仓库文件
打印行数太多就不全部截图了(截取一部分)
Wenn Sie nur die Arbeitsbereichsdateien löschen,
sehen die Dateien im folgenden Ordner wie im Bild unten aus. Es befinden sich noch Dateien im Cache-Bereich und im lokalen Warehouse. Wenn neuer Code übermittelt wird, wird nur der neue Code mit der Verzweigung zusammengeführt . Die gelöschten Dateien dieser Arbeitsbereiche sind noch vorhanden.
Und wenn Sie die IDE von Jetbrains verwenden, werden Sie feststellen, dass das Problem wie folgt direkt visualisiert wird
Diese lokal gelöschten Dateien sind ausgegraut und im Cache-Bereich noch vorhanden und können sogar erneut übermittelt werden, die Dateien können jedoch nicht geändert werden, da sie lokal nicht mehr verfügbar sind.
Wie kann man es also löschen?
planen
Da der Cache-Bereich und das lokale Lager im Allgemeinen kaskadiert arbeiten, müssen Sie nur den Befehl git verwenden, um den Inhalt des lokalen Lagers zu löschen.
git git revert
Wechseln Sie die Codeversion, um das Löschen von Inhalten zu erreichen
Da es sich bei Git um ein verteiltes, über mehrere Zweige verwaltetes Code-Warehouse handelt, kann die Git-Implementierung lokale Iterationen implementieren und zwischen verschiedenen Versionen wechseln. Wenn Git
HEAD
auf einen bestimmten Zweig zeigt, wird die Versionsbezeichnung auch festgelegt, wenn die aktualisierte Version aktualisiert wird.
Wie in der Abbildung oben gezeigt, kann durch ein Zurücksetzen der Version der von der aktuellen Version übermittelte Code gelöscht werden. Durch das Löschen bestimmter Dateien wird die vorherige Version der Datei wiederhergestellt. Das Problem dabei besteht jedoch darin, dass viele Codes für neue Funktionen und Codes, die nichts mit den zu löschenden Dateien zu tun haben, ebenfalls zurückgesetzt wurden und neu geschrieben und erneut übermittelt werden müssen, was noch problematischer ist wenn der Code in vielen Versionen aktualisiert wurde. (Diese Methode wird im Allgemeinen nicht empfohlen, es sei denn, es liegen größere Probleme vor.)
git reset
Dokument zurückziehen
Diese Methode erfordert direkt den Tracking-Status von Git, um die Datei in den Zustand vor Git Add zurückzusetzen, was gleichbedeutend damit ist, sie nie zu senden.
Während des Entnahmevorgangs werden das lokale Lager und der Cache-Bereich verkettet und automatisch zusammen zurückgezogen und kehren direkt in den Zustand vor Git Add zurück. Das lokale Lager wird zu einem neuen Lager ohne Inhalt, und der Cache-Bereich wird ebenfalls geleert. Jetzt müssen Sie nur noch die benötigten und nicht benötigten Dateien im Ordner löschen. Führen Sie git add und git commit erneut aus. Zu diesem Zeitpunkt wurde das lokale Lager aktualisiert.
Wie im Bild oben gezeigt, ist auch aus dem Datensatz ersichtlich, dass die ursprünglich übermittelte Datei gelöscht wurde. Überprüfen Sie das lokale Lager:
git ls-files -c
Wie oben gezeigt, app/customer/cmd/rpc/internal/logic
ist aus dem ursprünglichen Verzeichnis ein völlig neuer Inhalt geworden.
git rm --cached
Lagerdateien löschen
git rm --cached
Der Befehl ähnelt dem Befehl „git reset“, unterscheidet sich jedoch logisch. rm löscht direkt den Git-bezogenen Inhalt der angegebenen Datei.
Der Befehl git rm löscht auch die angegebenen Dateien im Warehouse- und Cache-Bereich und kehrt in den Zustand ohne git add zurück.
git rm
und git reset
sind zwei verschiedene Befehle in Git, die sich in ihrer Funktionsweise unterscheiden:
-
git rm ist der Befehl zum Entfernen von Dateien aus der Versionskontrolle. Es führt zwei Vorgänge aus: Es löscht die Datei aus dem lokalen Dateisystem und protokolliert den Löschvorgang im Versionsverlauf von Git. Auf diese Weise wird die Datei nicht mehr in Ihrer Codebasis angezeigt und kann nach dem Festschreiben der Änderungen nicht wiederhergestellt werden. Sie können die zu löschenden Dateien mit dem Befehl git rm <Dateiname> angeben.
-
git reset wird verwendet, um ein Commit rückgängig zu machen oder HEAD auf ein anderes Commit zu verweisen. Es wird verwendet, um den Status des aktuellen Arbeitsbaums und Staging-Bereichs zu ändern. git reset kann verwendet werden, um Commits rückgängig zu machen und ihre Änderungen zu verwerfen. Es kann auch verwendet werden, um den Verzweigungszeiger auf einen anderen Commit zu verschieben und so den aktuellen Code-Basisstatus zu ändern.
-
Wenn Sie den Befehl „git reset“ verwenden, um einen Commit anzugeben, zeigt HEAD auf den Commit und der aktuelle Arbeitsbaum und der Staging-Bereich werden auf den Status dieses Commits zurückgesetzt. Wenn Sie den Befehl git reset --hard verwenden, um einen Commit anzugeben, verweist er HEAD auf diesen Commit und verwirft die Änderungen am aktuellen Arbeitsbaum und Staging-Bereich vollständig.
Zusammenfassend lässt sich sagen, dass git rm zum Löschen von Dateien verwendet wird, während git reset zum Rückgängigmachen oder Ändern von Commits verwendet wird und zum Verschieben von Verzweigungszeigern verwendet werden kann. Diese beiden Befehle spielen in Git unterschiedliche Rollen. Wählen Sie je nach Bedarf den entsprechenden Befehl aus, um den gewünschten Vorgang auszuführen.