Entfernen Sie Dateien aus dem Git-Commit

1613

Ich benutze Git und habe nur wenige Dateien mit festgeschrieben

git commit -a

Später stellte ich fest, dass dem Commit fälschlicherweise eine Datei hinzugefügt wurde.

Wie kann ich eine Datei aus dem letzten Commit entfernen?

Lolly
quelle
2
Dieser Link ist perfekt für Ihre Frage: stackoverflow.com/questions/307828/…
b3h3m0th
@ Charles B: Ja, dies ist mein letztes Commit
Lolly
8
Hast du das Commit auf den Server übertragen?
Paritosh Singh
4
Ich mache es einfach mit:git reset filepath
felipekm

Antworten:

3089

Ich denke, andere Antworten hier sind falsch, da es sich um eine Frage handelt, bei der die irrtümlich festgeschriebenen Dateien aus dem vorherigen Festschreiben wieder in den Staging-Bereich verschoben werden, ohne die an ihnen vorgenommenen Änderungen abzubrechen. Dies kann wie von Paritosh Singh vorgeschlagen erfolgen:

git reset --soft HEAD^ 

oder

git reset --soft HEAD~1

Setzen Sie dann die unerwünschten Dateien zurück, um sie vom Commit auszuschließen:

git reset HEAD path/to/unwanted_file

Jetzt erneut festschreiben, können Sie sogar dieselbe Festschreibungsnachricht wiederverwenden:

git commit -c ORIG_HEAD  
juzzlin
quelle
86
Danke dafür. Es lohnt sich hinzuzufügen, dass Sie sich git pushbeschweren werden , wenn Sie Ihr früheres (falsches) Commit bereits vorangetrieben haben und jetzt versuchen , Ihr Repo zu reparieren Updates were rejected because the tip of your current branch is behind its remote counterpart.. Wenn Sie sicher sind, dass Sie sie drücken möchten (z. B. Ihre Gabel), können Sie die -fOption verwenden, um den Druck zu erzwingen, z git push origin master -f. (Tun Sie dies nicht mit einem Upstream-Repo, von dem andere
abrufen
57
git reset --soft HEAD^ist meine häufigste Undo-Operation
Funroll
2
@PabloFernandez, zuallererst könnte die akzeptierte Antwort das gewesen sein, wonach das OP gesucht hat (außerdem wurde es Monate zuvor veröffentlicht). Zweitens sind akzeptierte Antworten immer an der Spitze, unabhängig von der Anzahl der Stimmen.
MITjanitor
4
@PabloFernandez oben in allen Antworten befinden sich drei Registerkarten, mit denen Sie die Reihenfolge der Antworten steuern können: aktiv , älteste und Stimmen . Ich vermute, deine ist auf die älteste eingestellt . Schalten Sie es auf Stimmen um , obwohl die akzeptierte Antwort immer noch oben steht. Diese Antwort ist die zweite.
Ahsteele
15
Ich wusste so viel darüber git reset, wollte aber einen Weg finden, um das bestehende Commit "an Ort und Stelle" zu beeinflussen. Ich habe gerade davon erfahren git commit -C. Was ich also will, ist Ihr genaues Rezept mit einem weiteren Schritt, dem "New Commit Again" git commit -C [hash of original HEAD commit from first step].
Metamatt
323

ACHTUNG ! Wenn Sie nur eine Datei aus Ihrem vorherigen Commit entfernen und auf der Festplatte behalten möchten , lesen Sie die Antwort von juzzlin oben.

Wenn dies Ihr letztes Commit ist und Sie die Datei vollständig aus Ihrem lokalen und dem Remote-Repository löschen möchten , können Sie:

  1. Entfernen Sie die Datei git rm <file>
  2. Commit mit Änderungsflagge: git commit --amend

Das Änderungsflag weist git an, erneut festzuschreiben, aber "zusammenführen" (nicht im Sinne des Zusammenführens zweier Zweige) dieses Festschreiben mit dem letzten Festschreiben.

Wie in den Kommentaren angegeben, entspricht die Verwendung git rmhier der Verwendung des rmBefehls selbst!

CharlesB
quelle
120
Sie können auch verwenden git rm --cached, um die Dateien auf der Festplatte zu halten
Arkadiy Kukarkin
14
Warnung an diejenigen, die diese Antwort durchsuchen: Stellen Sie sicher, dass Sie die Datei LÖSCHEN möchten (wie in "Gehe weg"!) Und nicht nur aus der Commit-Liste entfernen möchten.
Scott Biggs
8
So fügen Sie zu dem, was andere sagen (und machen es leichter merken nicht , dies zu tun , wenn Sie wirklich wollen): Der rmim gitBefehl ist zu tun , was rmsich tut!
yo
@CharlesB Können Sie bitte die Notiz aus Arkadiy Kukarkins Kommentar zu Ihrer Antwort hinzufügen, um sie sichtbarer zu machen?
Mopo922
2
Beachten Sie, dass die Dateien weiterhin wiederhergestellt werden können. Falls Sie Ihre Meinung geändert haben, ist das vorherige Commit git commit --amendweiterhin vorhanden und kann beispielsweise mit gefunden werden git reflog. Es ist also nicht so schlimm, wie die anderen Kommentare vermuten lassen.
Steohan
165

In allen vorhandenen Antworten geht es darum, die unerwünschten Dateien aus dem letzten Commit zu entfernen .

Wenn Sie unerwünschte Dateien aus einem alten Commit entfernen möchten (auch gepusht) und kein neues Commit erstellen möchten, was aufgrund der folgenden Aktion nicht erforderlich ist:

1.

Suchen Sie das Commit, dem die Datei entsprechen soll.

git checkout <commit_id> <path_to_file>

Sie können dies mehrmals tun, wenn Sie viele Dateien entfernen möchten.

2.

git commit -am "remove unwanted files"

3.

Suchen Sie die commit_id des Commits, zu dem die Dateien versehentlich hinzugefügt wurden. Sagen wir hier "35c23c2"

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

Dieser Befehl öffnet den Editor gemäß Ihren Einstellungen. Die Standardeinstellung ist vim.

Verschieben Sie das letzte Commit, das "unerwünschte Dateien entfernen" sein sollte, in die nächste Zeile des falschen Commits (in unserem Fall "35c23c2") und setzen Sie den Befehl wie folgt fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

Sie sollten nach dem Speichern der Datei gut sein.

Beenden :

git push -f

Wenn Sie leider Konflikte bekommen, müssen Sie diese manuell lösen.

Brian
quelle
2
Das mit Nano zu machen ist fabelhaft! Strg + K, Strg + U, setze ein 'f', Strg + X, setze 'y' und voila!
Sequielo
6
Wenn Sie die Dateien tatsächlich aus dem Repo (nicht aus dem Dateisystem) entfernen möchten, anstatt sie nur auf eine frühere Version zurückzusetzen, tun Sie dies anstelle von Schritt 1 git rm --cached <file(s)>.
Waldyrious
2
Warten Sie, Sie können Commits einfach nach Belieben in der Interactive-Rebase-Datei verschieben.
Dan Rosenstark
2
Sie können völlig, aber Sie können (oder können nicht) Konflikte bekommen.
Brian
6
Dieser Vorgang könnte durch Hinzufügen --fixup=35c23c2zum git commitBefehl etwas vereinfacht werden . Dadurch wird das Commit automatisch als Korrektur des erforderlichen Commits eingerichtet, sodass Sie es nicht in der Rebase angeben müssen. Wenn Sie --autosquashdem git rebaseBefehl hinzufügen , verschiebt git Ihr Commit automatisch an den richtigen Speicherort, sodass Sie in der interaktiven Rebase nichts tun müssen. Speichern Sie einfach das Ergebnis (was bedeutet, dass Sie nicht einmal markieren müssen) -i. obwohl ich es trotzdem gerne benutze, um sicherzustellen, dass alles so aussieht, wie ich es erwartet habe).
Guss
144

Wie aus der akzeptierten Antwort hervorgeht, können Sie dies tun, indem Sie das gesamte Commit zurücksetzen. Dies ist jedoch ein ziemlich hartnäckiger Ansatz.
Eine sauberere Möglichkeit, dies zu tun, besteht darin, das Commit beizubehalten und die geänderten Dateien einfach daraus zu entfernen.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

Der git resetnimmt die Datei wie im vorherigen Commit und stellt sie im Index bereit. Die Datei im Arbeitsverzeichnis bleibt unberührt.
Das git commitwird dann festschreiben und den Index in das aktuelle Festschreiben quetschen.

Dies nimmt im Wesentlichen die Version der Datei, die im vorherigen Commit enthalten war, und fügt sie dem aktuellen Commit hinzu. Dies führt zu keiner Nettoveränderung, sodass die Datei effektiv aus dem Commit entfernt wird.

Patrick
quelle
5
Dies ist eine viel bessere Antwort, um nur eine einzelne Datei zu entfernen, ohne das gesamte Commit zu überarbeiten.
Nimish
Dies ist genau das gleiche wie diese Antwort: D stackoverflow.com/a/27340569/1623984
ThatsAMorais
@ ThatsAMorais in der Tat :-). Ich frage mich, ob diese Frage mit einer anderen verschmolzen wurde, und deshalb habe ich sie nicht gesehen. Oder vielleicht bin ich einfach blind. In beiden Fällen denke ich, dass ich dazu neige, es aufgrund der Stimmen populärer zu lassen (vielleicht bevorzugen die Leute die kurze und direkte Antwort).
Patrick
Lass es auf jeden Fall! :) Wir hatten eindeutig die richtige Idee und der Zweck ist zu helfen. Ich denke, das Zusammenführen ist eine gute Theorie.
ThatsAMorais
Wie machst du das, wenn du schon auf einen Zweig auf Github geschoben hast? Nach diesem Fix habe ich versucht zu pushen und die Meldung "Updates wurden abgelehnt, weil die Spitze Ihres aktuellen Zweigs hinter dem Hinweis steht: das entfernte Gegenstück."
Ollie Williams
41

Wenn Sie die Änderungen nicht auf den Server übertragen haben, können Sie sie verwenden

git reset --soft HEAD~1

Alle Änderungen werden zurückgesetzt und auf ein Commit zurückgesetzt

Wenn Sie Ihre Änderungen übernommen haben, befolgen Sie die von @CharlesB beantworteten Schritte

Paritosh Singh
quelle
2
-1 Git Reset entfernt Änderungen passiert Datei aus dem Staging-Bereich, hier wurde die Änderung festgeschrieben
CharlesB
OK, aber ich werde meine Ablehnung behalten, da es nicht das ist, was die OP will :) Entschuldigung
CharlesB
Ok, es ist in Ordnung für mich, aber warum will der Gegner das nicht? Was ist das Problem?
Paritosh Singh
Keine große Sache, aber weil das OP unerwünschte Dateien aus dem letzten Commit entfernen möchte und sie vor dem Commit einfach auf den Status zurücksetzen. Trotzdem müssen Sie das Commit wiederholen.
CharlesB
3
@Aris verwenden Sie <git diff --cached>, um die Änderungen zu sehen
Paritosh Singh
37

Wenn Sie die Datei mit rm entfernen, wird sie gelöscht!

Sie fügen einem Commit in git immer etwas hinzu, anstatt es zu entfernen. In diesem Fall bringen Sie die Datei in den Zustand zurück, in dem sie sich vor dem ersten Commit befand (dies kann eine Löschaktion 'rm' sein, wenn die Datei neu ist) und dann erneut festschreiben und die Datei wird gehen.

So bringen Sie die Datei in einen früheren Zustand zurück:

    git checkout <commit_id> <path_to_file>

oder um es in den Zustand am entfernten HEAD zurückzusetzen:

    git checkout origin/master <path_to_file>

Ändern Sie dann das Commit und Sie sollten feststellen, dass die Datei aus der Liste verschwunden ist (und nicht von Ihrer Festplatte gelöscht wurde!).

Bob Flannigon
quelle
36
git checkout HEAD~ path/to/file
git commit --amend
Denis Shchepetov
quelle
1
Dies ist der beste Weg, um das letzte Commit zu ändern, das nicht gepusht wurde. Dadurch werden Änderungen in einer Datei zurückgesetzt, wodurch diese Datei effektiv aus dem letzten Commit entfernt wird.
Alex Bravo
Dies änderte auch die Datei. Wie werden lokale Änderungen in der Datei beibehalten?
theonlygusti
29

Im Folgenden wird nur die von Ihnen beabsichtigte Datei entfernt, wie es das OP verlangt hat.

git reset HEAD^ /path/to/file

Sie werden so etwas wie das Folgende sehen ...

Zu übernehmende Änderungen: (Verwenden Sie "git reset HEAD ...", um die Bühne zu verlassen.)

geändert: / path / to / file

Änderungen, die nicht für das Festschreiben bereitgestellt wurden: (Verwenden Sie "git add ...", um zu aktualisieren, was festgeschrieben wird.) (Verwenden Sie "git checkout - ...", um Änderungen im Arbeitsverzeichnis zu verwerfen.)

geändert: / path / to / file

  • "Zu übernehmende Änderungen" ist die vorherige Version der Datei vor dem Festschreiben. Dies sieht aus wie eine Löschung, wenn die Datei nie existiert hat. Wenn Sie diese Änderung festschreiben, wird eine Revision durchgeführt, die die Änderung auf die Datei in Ihrem Zweig zurücksetzt.
  • "Änderungen, die nicht für das Festschreiben bereitgestellt wurden" ist die von Ihnen festgeschriebene Änderung und der aktuelle Status der Datei

Zu diesem Zeitpunkt können Sie die Datei beliebig bearbeiten, z. B. auf eine andere Version zurücksetzen.

Wenn Sie bereit sind, sich zu verpflichten:

git commit --amend -a

oder (wenn Sie einige andere Änderungen vorgenommen haben, die Sie noch nicht festlegen möchten)

git commit add /path/to/file
git commit --amend
Das ist AMorais
quelle
3
Die Antwort von juzzlin ist großartig, aber es ist übertrieben, das gesamte Commit zu deaktivieren, wenn Sie nur eines deaktivieren möchten. Das Aufheben der Bereitstellung des gesamten Commits kann zu Problemen führen, wenn Sie derzeit nicht bereitgestellte Änderungen an Dateien in diesem Commit vorgenommen haben, die Sie nicht verlieren möchten.
ThatsAMorais
27

Ich werde es Ihnen anhand eines Beispiels erklären.
Sei A, B, C 3 aufeinanderfolgende Commits. Commit B enthält eine Datei, die nicht festgeschrieben werden sollte.

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    
Moaz Rashad
quelle
Wenn sich die bestimmte Datei nicht im letzten oder vorherigen Commit befindet, ist dies die eleganteste Methode. Ich würde sogar sagen, dass es der eleganteste Weg im Allgemeinen ist. Ich mag interaktives Rebasing.
bvgheluwe
Wechseln Sie für ein einzelnes Commit noopzu edit [A_commit_ID]odere [A_commit_ID]
TamusJRoyce
23

Sie können es einfach versuchen.

git reset --soft HEAD~1

und erstellen Sie ein neues Commit.

Es gibt jedoch eine tolle Software "gitkraken". das macht es einfach mit git zu arbeiten.

HamzaMushtaq
quelle
1
Und nur zur Anmerkung: Danach müssen Sie die Dateientfernung git commit --amendin Ihrem letzten Commit aktualisieren. und danach können Sie überprüfen, ob es tatsächlich mitgit log -1 --stat
sdbbs
13
git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

Sie erhalten die lokale Datei noch. Wenn Sie die Datei auch nicht lokal haben möchten, können Sie die Option --cached überspringen.

Wenn sich alle Arbeiten in Ihrem lokalen Zweig befinden, müssen Sie die Datei in einem späteren Commit aufbewahren. Wenn Sie einen sauberen Verlauf haben möchten, könnte dies meiner Meinung nach einfacher sein:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

Anschließend können Sie die Rebase problemlos beenden, ohne sich an komplexere Befehle erinnern oder Nachrichten festschreiben oder so viel eingeben zu müssen.

Bryan Buckley
quelle
Das funktioniert bei mir. Ich gehe davon aus, wenn Sie die Dateien wieder in den Mix aufnehmen möchten, verwenden Sie einfach git add -A oder git add. und sie sind zurück.
Alexander Mills
11

Die Verwendung der Git-GUI kann das Entfernen einer Datei aus dem vorherigen Commit vereinfachen.

Angenommen, dies ist kein gemeinsam genutzter Zweig, und es macht Ihnen nichts aus, den Verlauf neu zu schreiben , dann führen Sie Folgendes aus:

git gui citool --amend

Sie können die versehentlich festgeschriebene Datei deaktivieren und dann auf "Festschreiben" klicken.

Geben Sie hier die Bildbeschreibung ein

Die Datei wird aus dem Commit entfernt, aber auf der Festplatte gespeichert . Wenn Sie die Datei nach dem versehentlichen Hinzufügen deaktiviert haben, wird sie in Ihrer Liste der nicht verfolgten Dateien angezeigt (und wenn Sie die Datei nach dem versehentlichen Ändern deaktiviert haben, wird sie in Ihren Änderungen angezeigt, die nicht für die Festschreibungsliste bereitgestellt wurden).

JDiMatteo
quelle
2
Unter Ubuntu können Sie Git sudo apt-get install git-gui
GUI
Vielen Dank! Ich hatte ein Problem (Fehler?), Bei dem ein Ordner mit einem .git-Repo hinzugefügt wurde und alle regulären Befehle zum Entfernen nicht funktionierten. Dies half jedoch. Da es ein paar Commits zurück sind, habe ich zuerst git rebase -i HEAD~4Ihren Befehl verwendet und dann ausgeführt, um den Editor zu öffnen. Ein weiterer Hinweis: "Unstaging" finden Sie im Menü "Commit".
Johny Skovdal
Die einfachste Lösung von allen. Am einfachsten zu merken. Und viel weniger fehleranfällig als die Verwendung git reset --soft HEAD^(unter Hinweis auf das Argument --soft), gefolgt von git commit -c ORIG_HEAD(anstelle von --amend, das alles vermasselt).
Brent Faust
9

Wenn Sie Ihr Commit beibehalten möchten (möglicherweise haben Sie bereits einige Zeit damit verbracht, eine detaillierte Commit-Nachricht zu schreiben, und diese nicht verlieren möchten) und die Datei nur aus dem Commit entfernen möchten, nicht jedoch vollständig aus dem Repository:

git checkout origin/<remote-branch> <filename>
git commit --amend
mattexx
quelle
6

Führen Sie eine Sequenz der folgenden Befehle aus:

//to remove the last commit, but preserve changes  
git reset --soft HEAD~1

//to remove unneded file from the staging area  
git reset HEAD `<your file>` 

//finally make a new commit  
git commit -m 'Your message'
Sergey Onishchenko
quelle
Ich habe versucht, diese Schritte auszuführen, und ich sehe diesen Fehlerfehler: Einige Refs konnten nicht auf "git ..." verschoben werden. Um zu verhindern, dass Sie den Verlauf verlieren, wurden Aktualisierungen ohne schnellen Vorlauf abgelehnt. Führen Sie die Remote-Änderungen zusammen (z 'git pull') bevor Sie erneut drücken. Weitere Informationen finden Sie im Abschnitt "Hinweis zum Schnellvorlauf" von "git push --help". (Nach Git Pull habe ich die gleichen Änderungen)
Dezigo
Dies bedeutet, dass sich der Status Ihres Remote-Repos geändert hat, während Sie Ihre lokale Arbeit erledigt haben. Und nach 'git pull' sollten Ihre lokalen Änderungen mit Remote-Änderungen zusammengeführt werden, das war's. Natürlich müssen Ihre Änderungen bleiben.
Sergey Onishchenko
Mit anderen Worten, wenn Sie diesen Fehler @Dezigo erhalten, fügen Sie das Flag -f hinzu, um die Aktualisierung zu erzwingen.
Jungledev
5

Ich wollte nur die Top-Antwort ergänzen, da ich einen zusätzlichen Befehl ausführen musste:

git reset --soft HEAD^
git checkout origin/master <filepath>

Prost!

andrepo
quelle
Herzlich willkommen. Diese Antwort wäre besser, wenn Sie erklären würden, was die Befehle tatsächlich tun.
Mark Chorley
3

Etwas, das für mich funktioniert hat, aber immer noch der Meinung ist, dass es eine bessere Lösung geben sollte:

$ git revert <commit_id>
$ git reset HEAD~1 --hard

Lassen Sie einfach die Änderung, die Sie verwerfen möchten, im anderen Commit und überprüfen Sie andere

$ git commit --amend // or stash and rebase to <commit_id> to amend changes
Saiyancoder
quelle
3

git reset --soft HEAD^Wickelt Ihr Commit zurück und wenn Sie tippen git status, erfahren Sie, was zu tun ist:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
Kardamom
quelle
2

Ich denke, eine schnellere und einfachere Möglichkeit ist die Verwendung des interaktiven Git Rebase-Modus.

git rebase -i head~1  

(oder Kopf ~ 4, wie weit du gehen willst)

und dann anstelle von "Auswählen" "Bearbeiten" verwenden. Mir war nicht klar, wie mächtig "Bearbeiten" ist.

https://www.youtube.com/watch?v=2dQosJaLN18

Ich hoffe, Sie finden es hilfreich.

Matt
quelle
Das Video ist 10 Minuten und nicht so nützlich
MolbOrg
2

Hatte das gleiche Problem, bei dem ich Änderungen in einem lokalen Zweig hatte, in dem ich nur eine Datei zurücksetzen wollte. Was für mich funktioniert hat war -

(In feature / target_branch unten habe ich alle meine Änderungen, einschließlich derjenigen, die ich für eine bestimmte Datei rückgängig machen wollte.)

( origin / feature / target_branch ist der Remote-Zweig, in den ich meine Änderungen übertragen möchte.)

( Feature / Staging ist mein temporärer Staging-Zweig, in dem ich alle gewünschten Änderungen mit Ausnahme der Änderung an dieser einen Datei vornehmen werde.)

  1. Erstellen Sie einen lokalen Zweig aus meinem Ursprung / Feature / Ziel_Zweig - genannt Feature / Staging

  2. Mein funktionierendes lokales Zweig- Feature / target_branch wurde mit dem Feature / Staging- Zweig zusammengeführt

  3. Ausgechecktes Feature / Staging, dann git reset --soft ORIG_HEAD (Jetzt werden alle Änderungen am Feature / Staging 'inszeniert, aber nicht festgeschrieben.)

  4. Unstaged die Datei, die ich zuvor mit unnötigen Änderungen eingecheckt habe

  5. Der Upstream-Zweig für Feature / Staging wurde in origin / feature / target_branch geändert

  6. Der Rest der bereitgestellten Änderungen wurde festgeschrieben und an meinen Remote- Ursprung / feature / target_branch weitergeleitet

user1201303
quelle
1

Wenn Sie diese Datei nicht mehr benötigen, können Sie dies tun

git rm file
git commit --amend
git push origin branch
tven
quelle
1

Wenn Sie GitHub verwenden und das Commit noch nicht gepusht haben, löst GitHub Desktop dieses Problem auf einfache Weise:

  1. Wählen Sie Repository -> Letzte Festschreibung rückgängig machen
  2. Deaktivieren Sie die Datei, die Sie versehentlich hinzugefügt haben. Ihre vorherige Festschreibungsnachricht befindet sich bereits im Dialogfeld.
  3. Drücken Sie die Commit-Taste!
Ron
quelle
1

Wenn Sie Dateien aus früheren Commits entfernen möchten, verwenden Sie Filter

git filter-branch --prune-empty --index-filter 'git rm --ignore-unmatch --cached "file_to_be_removed.dmg"'

Wenn Sie diesen Fehler sehen:

Es kann keine neue Sicherung erstellt werden. Eine vorherige Sicherung ist bereits in refs / original / Force vorhanden und überschreibt die Sicherung mit -f

Entfernen Sie einfach Refs-Backups auf Ihrem lokalen Repo

$ rm -rf .git/refs/original/refs
wilo087
quelle
1

wenn du deine änderungen noch nicht auf git drückst

git reset --soft HEAD~1

Alle Änderungen werden zurückgesetzt und auf ein Commit zurückgesetzt

Wenn dies das letzte Commit ist, das Sie vorgenommen haben, und Sie die Datei aus dem lokalen und Remote-Repository löschen möchten, versuchen Sie Folgendes:

git rm <file>
 git commit --amend

oder noch besser:

zuerst zurücksetzen

git reset --soft HEAD~1

Setzen Sie die unerwünschte Datei zurück

git reset HEAD path/to/unwanted_file

erneut festschreiben

git commit -c ORIG_HEAD  
TanvirChowdhury
quelle
es ist das gleiche wie oben, hat aber sogar wirklich zur Überprüfung beigetragen
Reshma
0

Dies funktioniert für mich, um die Datei aus dem Bit-Bucket-Repo zu entfernen, das ich anfangs in den Zweig verschoben habe.

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push
Swathi
quelle
0

Ich habe die aktuellen Dateien in einen anderen Ordner kopiert und dann alle nicht gepushten Änderungen entfernt, indem ich:

git reset --hard @{u}

Dann kopiere die Dinge zurück. Festschreiben, drücken.

Miranda
quelle
0

Sie können einfach diesen Befehl verwenden:

git restore --staged <file>
Suulisin
quelle
0
Here is the step to remove files from Git Commit.

>git reset --soft HEAD^1(either commitid ) -- now files moved to the staging area.
>git rm --cached filename(it will removed the file from staging area)
>git commit -m 'meaningfull message'(Now commit the required files)
Sheo Dayal Singh
quelle
-1

Keine der Antworten ist derzeit vernünftig. Klingt so, als ob genug Nachfrage besteht, dass eine echte Lösung vorgeschlagen werden sollte: https://github.com/git/git/blob/master/Documentation/SubmissionPatches

git --uncommit <Dateiname>

wäre nett. Ich verstehe, dass wir den Verlauf nicht ändern möchten, aber wenn ich lokal bin und versehentlich eine lokale "Hack" -Datei hinzugefügt habe und diese aus dem Commit entfernen möchte, wäre dies sehr hilfreich.

Bob9630
quelle