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.
Warum verbleiben Ordner in meinem lokalen Git-Arbeitsverzeichnis nach Commit und Checkout
Matt W
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_branch
und 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 derold_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 diegit 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
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