@ AD7six, Rose Perrone - Entschuldigung, nur meine Standardantwort auf das Bearbeiten von Personen in Notizen zu Antworten auf Fragen. :) Hatte nicht weiter nachgesehen. Prost!
Amber
Antworten:
80
Wenn Sie nur eine einzelne Datei in einem bestimmten Commit in ihren Status zurücksetzen möchten, möchten Sie tatsächlich den folgenden checkoutBefehl verwenden:
git checkout HEAD~2 myFile
Der revertBefehl wird für die Rück gesamte Commits verwendet (und es spielt zurückkehren Sie nicht zu , dass begehen, sondern eigentlich nur die Änderungen kehrt gemacht durch die begehen - wenn Sie eine andere begehen nach dem einen haben Sie angeben, die später begehen nicht rückgängig gemacht werden ).
Fantastisch, arbeitete wie ein Zauber. Ich könnte hinzufügen, dass Sie anstelle von HEAD ~ 2 auch den Hash eines bestimmten Commits (das war mein Fall) anstelle von HEAD ~ 2 angeben können, wenn Sie eine bestimmte Version der Datei wünschen.
Madison Tobal
20
Ich habe diesen Fehler in IntelliJ erhalten, und keine dieser Antworten hat mir geholfen. So habe ich es gelöst.
Irgendwie hat eines meiner Submodule ein .gitVerzeichnis hinzugefügt . Alle Git-Funktionen wurden zurückgegeben, nachdem ich sie gelöscht habe.
Ja, das hat bei mir funktioniert. Die Sache ist, wenn Sie Ihr Modul mit Composer verwalten, wird das nächste Update wahrscheinlich das neue erstellen .git.
Dickwan
2
Ich habe die Versionskontrolleinstellung in IntelliJ auf /Users/myusername/Developer/myProject/anstatt gesetzt <Project>und der Fehler ist auch für mich verschwunden. Einige andere Ordner waren .gitdarin und IntelliJ muss verwirrt gewesen sein.
Michael Shopsin
Vielen Dank! Das hat auch bei mir funktioniert! Ich hatte ein anderes Repository im Haupt-Repo (absichtlich) und PyCharm war verwirrt, aber nur für mehrere Dateien.
Sasha Miroshnychenko
8
git revertnimmt keinen Dateinamenparameter an. Wollen Sie git checkout?
Ich hatte eine "fatal: bad revision" mit Idea / Webstorm, weil ich ein Git-Verzeichnis in einem anderen hatte, ohne die richtigen Submodule oder Subbäume zu verwenden.
Ich hatte ein ähnliches Problem mit Intellij. Das Problem war, dass jemand die Datei, die ich in Intellij zu vergleichen versuche, mit .gitignore hinzugefügt hat, ohne die Datei tatsächlich von Git zu löschen.
Wenn Sie ein Commit löschen möchten, müssen Sie möglicherweise den Befehl git rebase verwenden
Git Rebase -i HEAD ~ 2
Es werden die letzten 2 Festschreibungsnachrichten angezeigt. Wenn Sie die Festschreibungsnachricht löschen und diese Datei speichern, wird die gelöschte Festschreibung automatisch ausgeblendet ...
In meinem Fall hatte ich einen inkonsistenten Status, in dem die betreffende Datei (mit dem fehlerhaften Commit-Hash) nicht tatsächlich zu Git hinzugefügt wurde. Dies kollidierte irgendwie mit dem Status von IntelliJ. Das manuelle Hinzufügen der Datei mit git in der Befehlszeile hat das Problem für mich behoben.
Antworten:
Wenn Sie nur eine einzelne Datei in einem bestimmten Commit in ihren Status zurücksetzen möchten, möchten Sie tatsächlich den folgenden
checkout
Befehl verwenden:Der
revert
Befehl wird für die Rück gesamte Commits verwendet (und es spielt zurückkehren Sie nicht zu , dass begehen, sondern eigentlich nur die Änderungen kehrt gemacht durch die begehen - wenn Sie eine andere begehen nach dem einen haben Sie angeben, die später begehen nicht rückgängig gemacht werden ).quelle
Ich habe diesen Fehler in IntelliJ erhalten, und keine dieser Antworten hat mir geholfen. So habe ich es gelöst.
Irgendwie hat eines meiner Submodule ein
.git
Verzeichnis hinzugefügt . Alle Git-Funktionen wurden zurückgegeben, nachdem ich sie gelöscht habe.quelle
.git
./Users/myusername/Developer/myProject/
anstatt gesetzt<Project>
und der Fehler ist auch für mich verschwunden. Einige andere Ordner waren.git
darin und IntelliJ muss verwirrt gewesen sein.git revert
nimmt keinen Dateinamenparameter an. Wollen Siegit checkout
?quelle
Ich hatte eine "fatal: bad revision" mit Idea / Webstorm, weil ich ein Git-Verzeichnis in einem anderen hatte, ohne die richtigen Submodule oder Subbäume zu verwenden.
Ich habe nach
.git
Dirs gesucht mit:quelle
Git Revert akzeptiert nur Commits
Aus den Dokumenten:
myFile
wird als Commit interpretiert - dagit revert
keine Dateipfade akzeptiert werden; begeht nurÄndern Sie eine Datei so, dass sie mit einem vorherigen Commit übereinstimmt
Um eine Datei so zu ändern, dass sie mit einem vorherigen Commit übereinstimmt, verwenden Sie
git checkout
quelle
Ich hatte ein ähnliches Problem mit Intellij. Das Problem war, dass jemand die Datei, die ich in Intellij zu vergleichen versuche, mit .gitignore hinzugefügt hat, ohne die Datei tatsächlich von Git zu löschen.
quelle
Warum spezifizierst du
myFile
dort?Git Revert setzt die von Ihnen angegebenen Commits zurück.
Setzt das
HEAD~2
Commit zurückkehrt
HEAD~2
UND zurückmyFile
Ich nehme an,
myFile
ist eine Datei, die Sie zurücksetzen möchten? In diesem Fall verwendengit checkout HEAD~2 -- myFile
quelle
Wenn Sie ein Commit löschen möchten, müssen Sie möglicherweise den Befehl git rebase verwenden
Git Rebase -i HEAD ~ 2
Es werden die letzten 2 Festschreibungsnachrichten angezeigt. Wenn Sie die Festschreibungsnachricht löschen und diese Datei speichern, wird die gelöschte Festschreibung automatisch ausgeblendet ...
quelle
In meinem Fall hatte ich einen inkonsistenten Status, in dem die betreffende Datei (mit dem fehlerhaften Commit-Hash) nicht tatsächlich zu Git hinzugefügt wurde. Dies kollidierte irgendwie mit dem Status von IntelliJ. Das manuelle Hinzufügen der Datei mit git in der Befehlszeile hat das Problem für mich behoben.
quelle