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).
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:
Gut, ich habe zu Branch gewechseltiss53, ich laufe ls -l
und dieMeineDatei.txtZu den Änderungen gehört die Löschung derMeineDatei.txtDatei, also:
git rm MyFile.txt
Schön, ls -l
wieder 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: master
und development
, und Sie sollten immer an arbeiten, development
bevor Sie die Änderungen nach verschieben master
. Nehmen wir an, Sie haben vergessen, development
vor 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 development
dann 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.
- Ich bin zum Login-Zweig gewechselt
git checkout login
- Die Datei test.html wurde entfernt
git rm --cached test.html
- Alles zum Staging-Bereich hinzugefügt
git add .
- Übernommen wurden die Änderungen mit
git commit -m 'removed test.html file'
- Das lokale Repo wurde in das Github-Remote-Repo gepusht mit
git push