Was bedeutet "tödlich: schlechte Revision"?

77

Im Kontext:

git revert HEAD~2 myFile
fatal: bad revision '/Users/rose/gitTest/myFile'

Ich bin sicher, dass HEAD ~ 2 existiert.

EDIT Amber ist korrekt. Ich wollte resetanstelle von verwenden revert.

Rose Perrone
quelle
1
@ 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 ).

Bernstein
quelle
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.

BenR
quelle
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?

Carl Norum
quelle
6

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 .gitDirs gesucht mit:

find ./ -name '.git' -print
Nicolas Zozol
quelle
4

Git Revert akzeptiert nur Commits

Aus den Dokumenten:

Setzen Sie bei einem oder mehreren vorhandenen Commits die Änderungen zurück, die durch die zugehörigen Patches eingeführt werden ...

myFilewird als Commit interpretiert - da git revertkeine 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

git checkout HEAD~2 myFile
AD7six
quelle
1

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.

Suneel
quelle
0

Warum spezifizierst du myFiledort?

Git Revert setzt die von Ihnen angegebenen Commits zurück.

git revert HEAD~2

Setzt das HEAD~2Commit zurück

git revert HEAD~2 myfile

kehrt HEAD~2UND zurückmyFile

Ich nehme an, myFileist eine Datei, die Sie zurücksetzen möchten? In diesem Fall verwenden

git checkout HEAD~2 -- myFile

Manojlds
quelle
0

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 ...

mrutyunjay
quelle
0

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.

Gregor
quelle