Git entfernt eine Datei aus einem Zweig und behält sie im Master

Lesezeit: 4 Minuten

Ich erstelle einen neuen Zweig

git checkout -b mybranch

dann lösche ich eine Datei daraus

git rm --cached myfile.txt

aber ich möchte es im Master behalten; warum, wenn ich zum Master auschecke

git checkout master

Ich erhalte einen “Fehler: Die folgenden nicht nachverfolgten Arbeitsbaumdateien würden beim Auschecken überschrieben: file.txt” und wenn ich das Auschecken erzwinge

git checkout master -f

die Datei wird aus dem Dateisystem gelöscht?

Ich bin mir sicher, dass mir etwas fehlt, aber ich wollte nur die Datei aus einem Zweig und nicht aus dem Master entfernen, während es so aussieht, als ob Git den Zweig zusammenführen möchte, wenn ich den Master auschecke.

Der Grund, warum ich verwendet habe git rm und nicht gitignore war, dass die Datei bereits festgeschrieben wurde.

Benutzer-Avatar
Jeff Puckett

Wenn Sie weiter verfolgen möchten myfile.txt an master aber gelöscht aus mybranchdann müssen Sie es einfach löschen und den Löschvorgang ausführen.

git checkout -b mybranch
rm myfile.txt
git commit -am "delete myfile.txt"

Jetzt, wenn Sie zur Kasse gehen mastersehen Sie Ihre Datei zurückgegeben und wenn Sie zur Kasse gehen mybranch es wird wieder weg sein.

Beachten Sie das, wenn Sie zusammenführen mybranch hinein masterwird am gelöscht master dann auch.

  • Danke, es funktioniert, aber ich musste vor dem Festschreiben ein “git add -u” hinzufügen oder “git rm” anstelle von rm verwenden. Wenn Sie Ihre Antwort bearbeiten, werde ich sie akzeptieren.

    – Eugenio

    30. Mai 2016 um 20:19 Uhr

  • @Eugenio danke, dass du das aufgefangen hast! Ich habe meine Antwort bearbeitet, um sie zu verwenden git commit -am Dadurch werden alle Änderungen hinzugefügt, einschließlich entfernter Dateien.

    – Jeff Puckett

    3. Juni 2016 um 11:59 Uhr

  • Ich kann das nicht glauben und habe 8 Stimmen bekommen … Ich denke, ques ist … ob es eine Möglichkeit gibt, eine Datei auf Master und nicht auf andere Zweige zu beschränken … zum Beispiel können geheime Informationen in einer Eigenschaftsdatei aufbewahrt werden in master branch und master branch sind nur für den Administrator zugänglich

    – Nitin Jha

    2. Mai 2020 um 5:51 Uhr

Benutzer-Avatar
Rik

git sieht die Datei als nicht nachverfolgt an, da sie noch nicht festgeschrieben ist. Sie müssen die Änderung festschreiben, bevor Sie die Zweige wechseln.

Sie haben also einen Zweig erstellt und Änderungen an diesem Zweig vorgenommen. Wenn Sie versuchen, zurück zu wechseln master git wird dies verbieten, da es Änderungen gibt, die noch nicht festgeschrieben (oder explizit ignoriert; (das ist eigentlich das, was die untracked meint)

Der Grund, warum die Datei wiederhergestellt wird, wenn Sie das Auschecken erzwingen (git checkout -f master) master liegt daran, dass die Datei ist in master

Wenn Sie dies tun möchten, müssen Sie Folgendes tun

Zweig erstellen und auschecken

git checkout -b somebranch

Entfernen Sie die Datei aus somebranch (--cached wird die Datei tatsächlich aus dem Index entfernen, aber die Datei in Ihrem Dateisystem intakt lassen. Sehen git-rm Referenzdokumente)

git rm --cached somefile

Bestätigen Sie die Änderung

git commit -m "Remove somefile"

Dadurch wird die Datei von Git entfernt, aber nicht von der Festplatte, sodass Sie jetzt für Git eine nicht verfolgte Änderung haben (eine Datei befindet sich auf der Festplatte, aber nicht in Git).

Wenn Sie möchten, dass andere Mitwirkende den Zweig auschecken können, verknüpfen Sie ihn mit einem Remote

git push --set-upstream origin somebranch

Jetzt wird die Datei entfernt origin/somebranch und nicht master

Beim Hinzufügen einer Datei zu .gitignore es wird nicht aus dem Repo entfernt, wenn es bereits festgeschrieben ist. Änderungen an der Datei werden jedoch ignoriert (also auch deren Löschung). Wenn Sie das tun, müssen Sie die Datei immer noch entfernen und übergeben. Danach verfolgt Git die Datei nicht mehr, wenn sie neu erstellt wird (oder jede andere Aktion an der Datei).

  • Genau das habe ich getan, ich habe vor “Checkout Master” zugesagt. Dateien wurden nicht wiederhergestellt (was ich erwartet hatte, eigentlich waren sie vor dem Auschecken noch im Dateisystem), sie wurden nach dem Auschecken aus dem Dateisystem GELÖSCHT.

    – Eugenio

    24. Mai 2016 um 19:52 Uhr

  • Verwenden Sie nicht –cached. Führen Sie einfach ‘git rm somefile’ aus, um die Datei auch aus Ihrem Dateisystem zu löschen. Es sollte wiederhergestellt werden, wenn Sie den Master erneut auschecken

    – Rick

    24. Mai 2016 um 19:53 Uhr


  • ‘git rm somefile’ macht eigentlich dasselbe wie ‘git rm –cached somefile && rm somefile’. Also nur das Entfernen aus dem Index (Cache) und das Belassen in Ihrem Dateisystem ist zu git, als ob Sie die Datei auf der Festplatte hinzugefügt hätten, aber nicht zu git). Hoffnung klärt etwas auf

    – Rick

    24. Mai 2016 um 20:04 Uhr

  • danke für den Kommentar; Was ist der Zweck von –cached dann?

    – Eugenio

    24. Mai 2016 um 21:39 Uhr

  • Falls Sie etwas von Git, aber nicht von der Festplatte entfernen möchten. ‘rm somefile’ macht das Gegenteil.

    – Rick

    24. Mai 2016 um 23:20 Uhr

Bestätigen Sie die Änderung auf mybranch, bevor Sie zurück zum Master wechseln.

1203450cookie-checkGit entfernt eine Datei aus einem Zweig und behält sie im Master

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy