Wenn Sie eine Datei in einem Zweig in git entfernen, müssen Sie sie auch aus dem Hauptzweig entfernen.

5391
nKn

Ich war gerade mit einer Situation konfrontiert, die mir mit Git unlogisch erscheint. Ich habe ein Repo mit vielen Commits, also hat es momentan nur einen Zweig ( Master ).

Master-Zweig

Angenommen, dieser Zweig hat eine Datei namens MyFile.txt . Jetzt muss ich einen anderen Zweig erstellen, da ich einige Änderungen an einigen Dateien vornehmen möchte. Ich möchte nicht, dass es sich um einen Master-Zweig handelt. Ich führe Folgendes aus:

git checkout iss53 

Nun sieht das Schema so aus:

Neue Abteilung

Gut, ich habe zu Branch iss53 gewechselt, ich laufe ls -lund die MyFile.txt . Eine der Änderungen umfasst das Löschen der Datei MyFile.txt.

git rm MyFile.txt 

Schön, ls -lwieder zu laufen zeigt, dass es nicht mehr MyFile.txt gibt . Also wechsle ich zurück zum Master- Zweig:

git checkout master 

Aber ... die Datei MyFile.txt ist ebenfalls verschwunden. Meine Logik sagt, dass, wenn ich die Datei auf einem Zweig gelöscht, es angewandt werden sollte nur auf diesen Zweig, also warum wird die Datei aus dem gelöschten Master Zweig als auch? Beachten Sie, dass ich noch keine Zusagen gemacht habe, nur verzweigt.

Hinweis : Beide Bilder stammen von Git-scm .

2

1 Antwort auf die Frage

2
Hamza Abbad

Die Antwort ist in Ihrer Frage:

Beachten Sie, dass ich noch keine Zusagen gemacht habe, nur verzweigt.

Wenn Sie keinen Commit ausführen, werden die Änderungen immer in Ihrem Arbeitsverzeichnis gespeichert. Das Wechseln der Verzweigung wirkt sich nicht auf Ihr Arbeitsverzeichnis aus und das Arbeitsverzeichnis hat auch keine Auswirkungen auf Ihr letztes Commit. Sie sehen, dass die Datei gelöscht wird, aber die Realität, dass sie nur aus Ihrem Arbeitsverzeichnis gelöscht wird. Wenn Sie die Änderungen löschen und zum letzten Commit zurückkehren möchten, verwenden Sie diesen Befehl:

git reset --hard HEAD 

Die Datei wird also wieder hergestellt.

Vielleicht ist es keine Logik für Sie, aber dieses Verhalten kann nützlich sein. Stellen Sie sich vor, Sie haben 2 Zweige: masterund development, und Sie sollten immer daran arbeiten, developmentbevor Sie die Änderungen verschieben master. Nehmen wir an, Sie haben vergessen, zu wechseln, developmentbevor Sie mit der Arbeit beginnen. Dann haben Sie, bevor Sie sich zur Aufgabe begeben, erkannt, dass Sie sich gerade im Moment befinden master. Die Lösung ist einfach: Wechseln Sie einfach zum developmentCommit.