Що означає «фатальний: поганий перегляд»?


78

У контексті:

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

Я впевнений, що HEAD ~ 2 існує.

EDIT Amber правильно. Я мав на увазі використовувати resetзамість revert.


1
@ AD7six, Роуз Перрон - вибачте, просто моя відповідь за замовчуванням, коли я бачу, як люди редагують у примітках щодо відповідей на запитання. :) Не перевіряв далі. На здоров’я!
Amber

Відповіді:


81

Якщо ви хочете лише повернути окремий файл до його стану в певному коміті, ви насправді хочете скористатися checkoutкомандою:

git checkout HEAD~2 myFile

revertКоманда використовується для повертаючись цілі фіксацій (і не повертається вас до цієї фіксації, він на самому ділі просто Скасовує зміни , зроблені з тим , що вчиняють - якщо у вас є інший вчиняють після зазначеного вами, пізніше зробити не буде повернений ).


Фантастично, працювало як шарм. Я можу додати, що ви також можете вказати хеш конкретного коміту (це був мій випадок) замість HEAD ~ 2, якщо ви хочете отримати певну версію файлу.
Медісон Тобал,

20

Я отримував цю помилку в IntelliJ, і жодна з цих відповідей мені не допомогла. Тож ось як я це вирішив.

Якось один із моїх підмодулів додав .gitкаталог. Усі функції git повернулися після того, як я їх видалив.


Так, це спрацювало у мене. Справа в тому, що якщо ви керуєте своїм модулем за допомогою композитора, наступне оновлення, ймовірно, створить його .gitзнову.
dickwan

2
Я встановив у IntelliJ налаштування керування версіями /Users/myusername/Developer/myProject/замість, <Project>і помилка також зникла для мене. У ньому були деякі інші папки, .gitі IntelliJ, мабуть, заплутався.
Майкл Шопсін,

Дякую! Це спрацювало і на мене! У мене було інше сховище, включене до основного репо (спеціально), і PyCharm був заплутаний, але лише для кількох файлів.
Саша Мірошниченко


6

У мене був "фатальний: погана редакція" з Idea / Webstorm, оскільки у мене був каталог git всередині іншого, не використовуючи належним чином підмодулі або піддерева.

Я перевірив наявність .gitпапок за допомогою:

find ./ -name '.git' -print

4

Git revert приймає лише коміти

З документів:

Враховуючи один або кілька існуючих комітів, скасуйте зміни, які вносять відповідні виправлення ...

myFileінтерпретується як коміт - оскільки git revertне приймає шляхи до файлів; лише фіксує

Змініть один файл відповідно до попереднього коміту

Щоб змінити один файл відповідно до попереднього коміту - використовуйте git checkout

git checkout HEAD~2 myFile

1

У мене була подібна проблема з Intellij. Проблема полягала в тому, що хтось додав файл, який я намагаюся порівняти в Intellij, до .gitignore, фактично не видаливши файл із Git.


0

Чому ви myFileтам вказуєте ?

Git revert повертає вказані вами коміти.

git revert HEAD~2

повертає HEAD~2фіксацію

git revert HEAD~2 myfile

повертає HEAD~2ІmyFile

Я вважаю myFile, це файл, який ви хочете повернути? У такому випадку використовуйте

git checkout HEAD~2 -- myFile


0

Якщо ви хочете видалити будь-який коміт, можливо, вам доведеться використовувати команду git rebase

git rebase -i HEAD ~ 2

він покаже вам останні 2 повідомлення про коміти, якщо ви видалите повідомлення про коміт і збережете, що файл видаленого коміту автоматично зникне ...


0

у моєму випадку у мене був суперечливий стан, коли відповідний файл (із поганим хешем коміту) насправді не був доданий до Git, це якось зіткнулось із станом IntelliJ. Додавання файлу вручну за допомогою git у командному рядку вирішило проблему для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.