Bedeutet das Entfernen einer Datei aus einem Zweig in Git auch, dass sie aus dem Master-Zweig entfernt wird?

Bedeutet das Entfernen einer Datei aus einem Zweig in Git auch, dass sie aus dem Master-Zweig entfernt wird?

Ich bin gerade mit einer Situation konfrontiert worden, die mir bei Git unlogisch erscheint. Ich habe ein Repo mit vielen Commits, also hat es zu diesem Zeitpunkt nur einen Branch (Meister).

Hauptzweig

Angenommen, dieser Zweig hat eine Datei namensMeineDatei.txt. Jetzt muss ich einen anderen Zweig erstellen, da ich an einigen Dateien Änderungen vornehmen möchte und dies nicht direkt im Masterzweig tun möchte. Daher führe ich Folgendes aus:

git checkout iss53

Jetzt sieht das Schema folgendermaßen aus:

Neue Abteilung

Gut, ich habe zu Branch gewechseltiss53, ich laufe ls -lund dieMeineDatei.txtZu den Änderungen gehört die Löschung derMeineDatei.txtDatei, also:

git rm MyFile.txt

Schön, ls -lwieder zu laufen zeigt, dass es nichtMeineDatei.txtmehr. Also wechsle ich zurück zumMeisterZweig:

git checkout master

Aber dieMeineDatei.txtDatei ist ebenfalls verschwunden. Meine Logik besagt, dass, wenn ich die Datei in einem Zweig gelöscht habe, sie angewendet werden solltenurzu diesem Zweig, also warum wird die Datei aus demMeisterauch Branch? Beachten Sie, dass ich noch keine Commits vorgenommen habe, nur Branching.

Notiz: Beide Bilder stammen vonGit-scm.

Antwort1

Die Antwort liegt in Ihrer Frage:

Beachten Sie, dass ich noch keine Commits vorgenommen habe, sondern nur Verzweigungen.

Wenn Sie kein Commit durchführen, werden die Änderungen immer in Ihrem Arbeitsverzeichnis gespeichert. Das Wechseln des Zweigs hat keine Auswirkungen auf Ihr Arbeitsverzeichnis und das Arbeitsverzeichnis hat auch keine Auswirkungen auf Ihr letztes Commit. Sie sehen, dass die Datei gelöscht wird, aber in Wirklichkeit wird sie nur aus Ihrem Arbeitsverzeichnis gelöscht. Wenn Sie die Änderungen löschen und zum letzten Commit zurückkehren möchten, verwenden Sie diesen Befehl:

git reset --hard HEAD

Dadurch wird die Datei wiederhergestellt.

Vielleicht ist es für Sie nicht logisch, aber dieses Verhalten kann nützlich sein. Stellen Sie sich vor, Sie haben zwei Zweige: masterund development, und Sie sollten immer an arbeiten, developmentbevor Sie die Änderungen nach verschieben master. Nehmen wir an, Sie haben vergessen, developmentvor Arbeitsbeginn zu zu wechseln, und dann – vor dem Commit – stellen Sie fest, dass Sie bei sind master. Die Lösung ist einfach: Wechseln Sie einfach zu und führen Sie developmentdann ein Commit durch.

Antwort2

Immer wenn ich eine Datei aus einem meiner Zweige (den ich „Login“ nannte) entfernte, wurde sie nicht aus dem Master-Zweig entfernt.

  1. Ich bin zum Login-Zweig gewechseltgit checkout login
  2. Die Datei test.html wurde entferntgit rm --cached test.html
  3. Alles zum Staging-Bereich hinzugefügtgit add .
  4. Übernommen wurden die Änderungen mitgit commit -m 'removed test.html file'
  5. Das lokale Repo wurde in das Github-Remote-Repo gepusht mitgit push

verwandte Informationen