2017-01-29 5 views
0

Ich habe zwei Zweige: master und web und ich habe meine Arbeitskopie in einem Verzeichnis. In web Zweig habe ich den Ordner foo. Ich habe an den Dateien foo gearbeitet und den Job übernommen. Dann wechselte ich zu master mit:Git: Dateien bleiben beim Umschalten zwischen zwei Zweig

git checkout master 

Aber foo Ordner ist immer noch da in meiner Arbeitskopie. Es sieht komisch aus! Git status auf Master-Zweig sagt mir, alles ist in Ordnung. Aber der Ordner foo gehört nicht zum Zweig master. Selbst wenn ich mache

git checkout . 

web Ordner bleibt in meiner Arbeitskopie. Um zu reparieren I web Ordner. Jetzt, git status sagt mir immer wieder, dass alles in Ordnung ist und so ist es.

Aber es ist sehr seltsam, was hätte passieren können und wie kann ich das vermeiden?

+1

Sehen Sie sich den Befehl [git clean] (https://git-scm.com/docs/git-clean) an. Git ist ein Datei-Tracker und so wird ein Ordner immer noch dort sitzen, wenn Sie die Zweige wechseln. Wenn Sie die git clean mit der Option -d ausführen, werden Verzeichnisse entfernt, aber ich empfehle dringend git clean -n, um zu sehen, was passieren wird, bevor Sie andere Varianten ausführen! – rasmeister

+0

Was mir seltsam vorkommt, ist, dass meine Arbeitskopie normalerweise jedes Mal geändert wird, wenn ich zu einem Zweig wechsel. Alle Ordner des alten Zweiges verschwinden und ein neuer Ordner erscheint. Das möchte ich tun, aber das ist nicht das Problem, das ich beschrieben habe. – floatingpurr

Antwort

0

Ich denke, Sie haben eine Datei in foo, die auch als Master festgelegt ist. Vergleichen Sie die Ausgabe von

git checkout web 
git ls-files foo 

mit

git checkout master 
git ls-files foo 

Der ls-files Befehl sollte leer zurück, wenn der Ordner nicht versioniert ist. Aber ich denke, du wirst trotzdem Output bekommen.

Git verfolgt, welche Ordner exklusiv für einen Zweig sind, und entfernt sie, wenn Zweige gewechselt werden. git status berichtet auch über alle nicht aufgezeichneten Dateien, die nicht in der .gitignore sind.

+0

'git ls-files foo' ist leer in' master'. 'foo' war immer exklusiv für 'web'. Ich benutze Git vorsichtig, dann verstehe ich nicht, wie das passiert ist. Könnte ein Atomfehler sein? Ich wechsle durch den Zweig über Bash, aber ich visualisiere das Projekt in Atom ... – floatingpurr

+0

Was ist die Ausgabe von 'ls -al foo' aus dem Master-Zweig? –

+0

'Keine solche Datei oder Verzeichnis ', aber, wie ich beschrieben habe, ich' rm' den Ordner manuell, um mein Arbeitsverzeichnis auf das letzte 'Master'-Commit ausgerichtet zu halten. – floatingpurr

Verwandte Themen