Git löscht Code, der an das lokale Warehouse übermittelt wurde

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`

包含了如下的文件:

Fügen Sie hier eine Bildbeschreibung ein

本地仓库和远程仓库是一致的

项目中使用`git ls-files -c`命令查看本地仓库文件

打印行数太多就不全部截图了(截取一部分)

Fügen Sie hier eine Bildbeschreibung ein
Wenn Sie nur die Arbeitsbereichsdateien löschen,
Fügen Sie hier eine Bildbeschreibung ein
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.

alt

Und wenn Sie die IDE von Jetbrains verwenden, werden Sie feststellen, dass das Problem wie folgt direkt visualisiert wird

Fügen Sie hier eine Bildbeschreibung ein
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 revertWechseln 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 HEADauf einen bestimmten Zweig zeigt, wird die Versionsbezeichnung auch festgelegt, wenn die aktualisierte Version aktualisiert wird.

Fügen Sie hier eine Bildbeschreibung ein
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 resetDokument 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.

Fügen Sie hier eine Bildbeschreibung ein
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.

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
Wie oben gezeigt, app/customer/cmd/rpc/internal/logicist aus dem ursprünglichen Verzeichnis ein völlig neuer Inhalt geworden.

  • git rm --cachedLagerdateien löschen

git rm --cachedDer Befehl ähnelt dem Befehl „git reset“, unterscheidet sich jedoch logisch. rm löscht direkt den Git-bezogenen Inhalt der angegebenen Datei.

Fügen Sie hier eine Bildbeschreibung ein
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 rmund git resetsind zwei verschiedene Befehle in Git, die sich in ihrer Funktionsweise unterscheiden:

  1. 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.

  2. 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.

  3. 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.

Supongo que te gusta

Origin blog.csdn.net/xwh3165037789/article/details/132121676
Recomendado
Clasificación