Warum verbleiben Ordner in meinem lokalen Git-Arbeitsverzeichnis nach Commit und Checkout

Lesezeit: 3 Minuten

Benutzer-Avatar
Matt W

Ich habe einen Ordner erstellt, der Dateien in meiner lokalen Arbeits-Git-Struktur enthält. Ich habe einen neuen Zweig mit git checkout -b erstellt und git add verwendet. und git commit -m “…”, um diese Dateien zu meinem lokalen Zweig hinzuzufügen. Aber wenn ich git checkout master mache, ist der Ordner, den ich erstellt und übergeben habe, immer noch da. Wieso den? Ich dachte, git commit würde den Ordner und seinen Inhalt in meinen lokalen Zweig legen und ihn ausschalten, wenn ich den Master auschecke.

  • Als Hinweis zur Terminologie: git checkout -b <name> erstellt einen neuen “Zweig”, kein neues “Repo”. Das Repo bezieht sich auf das gesamte Git-Verzeichnis.

    – Zachary Espiritu

    26. August 2017 um 22:45 Uhr

  • Git löscht normalerweise leere Ordner … gibt es vielleicht versteckte Dateien?

    – o11c

    26. August 2017 um 23:05 Uhr

  • Nein, es gibt keine versteckten Dateien.

    – Matt W

    27. August 2017 um 6:43 Uhr

Wenn Sie zuvor nicht verfolgte Dateien zu einem neuen Zweig hinzufügen und dann einen anderen Zweig auschecken, der diese Dateien derzeit nicht verfolgt, werden sie nicht aus Ihrer Arbeitskopie entfernt.

Hier ist ein Beispiel – nehmen wir an, ich befinde mich gerade in einem sauberen Zweig namens old_branchund ich checke einen neuen Zweig mit dem Namen aus new_branch:

git checkout -b new_branch

Dann erstelle ich eine neue Datei mit dem Namen test.txt in diesem Branch und füge es dem Repo hinzu:

touch test.txt  # creates a new file named test.txt
git add test.txt
git commit -m "Added test.txt"

Das test.txt Datei wird derzeit von der verfolgt new_branch Zweig. Allerdings schalte ich die Zweige wieder um old_branch:

git checkout old_branch

Seit test.txt wird nicht von verfolgt old_branch, es belässt es im Arbeitsverzeichnis und überschreibt es nicht. Dies ist das erwartete Verhalten. Wenn Sie tun git status An dieser Stelle werden Sie feststellen, dass die test.txt Datei ist derzeit nicht verfolgt.


Der Vollständigkeit halber, wenn Sie Ihre Arbeitskopie von allen nicht nachverfolgten Dateien bereinigen müssen, können Sie zuerst Folgendes tun:

git clean -n

Dadurch werden alle nicht nachverfolgten Dateien aufgelistet, die entfernt werden. Wenn Sie mit der Liste zufrieden sind, können Sie diese Dateien entfernen mit:

git clean -f -d

Dies ist ein destruktiver Befehl, zumal es Dateien löscht, die nicht vom aktuellen Zweig verfolgt werden. (Sie werden jedoch nicht aus Zweigen gelöscht, die diese Dateien verfolgen.)

  • Was ist also der Unterschied zwischen dem und dem Git-Push nach dem Hinzufügen und Festschreiben? Warum werden die nachverfolgten Dateien entfernt oder bereinigt, wenn sie nicht im Zweig old_branch vorhanden sind?

    – Matt W

    26. August 2017 um 23:33 Uhr

  • git push schiebt nur Ihren aktuellen Zweig stromaufwärts, auch bekannt als zu Ihrem Remote-Zweig. Es ist nicht ganz relevant für das von Ihnen beschriebene Problem, dass die nicht verfolgten Dateien beim Wechseln der Branches nicht entfernt werden.

    – Zachary Espiritu

    27. August 2017 um 2:18 Uhr

  • Und zu Ihrer anderen Frage – wenn eine Datei von beiden nachverfolgt wird new_branch und der old_branch, wird es von jedem Zweig überschrieben, wenn ich sie auschecke. Wenn andererseits eine Datei von einem Zweig verfolgt wird und nicht vom anderen, ändert das Wechseln von Zweigen die Datei nicht, da der andere Zweig nicht danach sucht. Als solche ist die git clean Der Befehl kann verwendet werden, um Dateien von Ihrem lokalen Computer zu entfernen werden von der aktuellen Verzweigung nicht verfolgt.

    – Zachary Espiritu

    27. August 2017 um 2:19 Uhr

  • Ich verstehe das alles. Was ich frage, ist, warum eine Datei, die vom aktuellen Zweig verfolgt wird, nicht verschwindet, wenn ich einen Zweig auschecke, der sie nicht hat? Dies in einem Szenario, in dem ich nicht auf Remote gepusht habe, sondern vor dem Auschecken ein Add and Commit durchgeführt habe.

    – Matt W

    27. August 2017 um 6:41 Uhr

1012040cookie-checkWarum verbleiben Ordner in meinem lokalen Git-Arbeitsverzeichnis nach Commit und Checkout

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy