Git - Як виправити "пошкоджені" інтерактивні бази?


184

Мені вдалося створити невеликий безлад у моєму локальному сховищі git. Я намагався виправити неполадку, скориставшись наведеними нижче вказівками . Перед тим, як запустити "git commit --amend" (а після reit git - інтерактивна), я вирішив, що мої зміни були невірними, і тому я виконав "git reset HEAD --hard". Я вам не дуже гарна ідея.

Зараз начебто інтерактивна база даних «застрягла». Git показує поточну гілку як (| REBASE-m). Кожна команда (cd .., ls, git rebase ...) всередині мого сховища дає таку помилку:

cat: .git / rebase-merge / head-name: Немає такого файлу чи каталогу

Ось як виглядає git rebase --abort:

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

Ось результат git rebase - продовжити:

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

Будь-які ідеї? Мені хотілося б повернути ситуацію до стану, яке було до того, як я розпочав свою продуману операцію ребазування.

Ось як показує ситуацію журнал git --lineline:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

І це прекрасно.

Я використовую msysgit v1.7.0.2.


59
git rebase --quitпрацював на мене
Хуан

Відповіді:


160

Схоже, Git намагався видалити .git/rebase-mergeкаталог, але не зміг його повністю видалити. Ви намагалися скопіювати цю папку геть? Також скопіюйте .git/rebase-applyпапку, якщо така є.


7
Дякуємо, що вказали на це. Мені вдалося виправити свою проблему, просто перезавантаживши комп’ютер. Я не впевнений, що пішло не так, оскільки якось кожен доступ до папки .git \ rebase-merge викликав помилку "Доступ відмовлено".
Мікаель Коскінен

19
Перезавантаження не працює для мене , але git rebase --abortstackoverflow.com/a/4757777/146044 ) зробила роботу.
backus

3
Лише перезапуск роботи git shell (windows) працював на мене ( git rebase --abortне працював)
mhand

4
слово попередження ... У мене в робочому каталозі було 4 години змін, коли я помітив пошкоджену помилку відновлення. спробував git rebase --abortце витер мої нестандартні зміни ... помилка все-таки зникла
Джордж Ананда Еман

117
перезавантаження або git rebase --abortвсе-таки видав мені помилки. git rebase --quitпрацював на мене.
Флавіо Родрігес

198

Я застряг у цьому. Я створив файл заголовка, а потім зіткнувся з черговою помилкою, сказавши, що він не може знайти файл у файлі, тому я створив цей файл. Тоді у мене з'явилася ще одна помилка: "Не можу прочитати" .git / rebase-apply / into ": Немає такого файлу чи каталогу.

Тож я переглянув документацію git для перезавантаження та знайшов ще одну команду:

git rebase --quit

Це повернуло мене на мою гілку без змін, і я міг запустити ребауз заново, як новий.


51
git rebase --quitце було!
Стівен Шоу

5
--quitпрацювали. --abortне тому, що ребазу було скасовано на півдорозі
Калоб Таулінь

1
У мене була схожа помилка, пов’язана з базою даних, просто з різним повідомленням про помилку. Пробував: $ git rebase --abortВихід: error: could not read '.git/rebase-apply/head-name': No such file or directoryНарешті, це рішення усуває мою проблему:git rebase --quit
ствердну

Отримано. git rebase --quitабсолютно мене врятувало. Такі ж симптоми, як описано, але мій з’явився після спроби зробити це git pull --rebase, яке чомусь не вдалося. Зауважте, що ввімкнено автозапуск (git версія 2.27.0.windows.1) і одночасно працював VS2019 (вказував на це репо) - підозрюю, що комбінація цих переплутала його.
ErrCode

90

У мене була подібна проблема через процес zombie vim.exe. Убиваючи його в диспетчері завдань з подальшим git rebase --abortвиправленням.


це була і моя проблема. Я використав handleкоманду sysinternals і побачив, що файл (sh.exe) має файл заблокований. Використовуючи pskill <pid>виправлені для мене.
Пол Олівер

У мене був той самий випуск, але з Sublime Text для мене.
Toivo Säwén

35

Дякую @Laura Slocum за вашу відповідь

Я переплутав речі під час перезавантаження та отримав відокремлену ГОЛОВУ з

 error: could not read orig-head

що заважало мені закінчити релізинг.

Відомо, що відокремлена ШОЛА містить точно мій правильний перегляд потрібного стану, тому я побіг

rebase --quit

і після цього я перевірив нову темп-гілку, щоб прив’язати її до відокремленої голови.

Порівнюючи її з гілкою, яку я хотів відновити, я можу побачити, що нова тимчасова гілка знаходиться саме в тому стані, до якого я хотів досягти. Дякую


7

Була така ж проблема в Eclipse. Не вдалося Rebase => скасувати з Eclipse.

Виконання git rebase --abort від Git Bash.


7

У Windows, якщо ви не бажаєте або не можете перезапустити апарат, див. Нижче.

Встановити провідник процесів: https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

У Провіднику процесів знайдіть> Ручка файлів або DLL ...

Введіть назву файлу, згадану в помилці (для моєї помилки це було «git-rebase-todo», але у вищезазначеному питанні «зроблено»).

Провідник процесів виділить процес, утримуючи блокування у файлі (для мене це було "grep").

Вбийте процес, і ви зможете припинити дію git стандартним способом.



3

У моєму випадку вісімдесят git rebase --abortі git rebase --continueкидали:

помилка: не вдалося прочитати '.git / rebase-apply / head-name': Немає такого файлу чи каталогу

Мені вдалося виправити цю проблему, вручну видаливши: .git\rebase-applyкаталог.


2

Я використовую git version 2.19.2.windows.1.

єдине, що працювало для мене, - це видалити .git/rebase-apply/каталог і зробити git reset --hard.


1

У моєму випадку це було тому, що я відкрив Журнал SmartGit у відповідному проекті Git та Total Commander у відповідному каталозі проектів. Коли я закрив обидва, мені вдалося відновити базу даних без жодних проблем.

Чим більше я думаю про це, тим більше я підозрюю, що Total Commander, тобто Windows має блокування у відкритому каталозі, git rebase намагався щось із.

Дружні поради: Коли ви намагаєтесь щось виправити, завжди робіть по одній зміні. ;)


1

Я перепробував всі вищезазначені кроки, але нічого не працювало для мене. Нарешті, перезапуск комп'ютера працював над цією проблемою: D


1

З SublimeText 3 у Windows проблема вирішується просто закривши вікна Sublime, які використовуються для інтерактивного видання.


0

Після того, як ви задовільно виконали перезапис X кількості комітетів, остання команда повинна бути git rebase --continue. Це завершує процес і виходить з режиму ребазування.


0

У мене була така ж проблема. Я використав провідник процесів, як було запропоновано в іншій публікації (я не в змозі знайти цю посаду) і з'ясував, який процес має блокування у файлі, і вбити його. потім виконати --continue або --abort відповідно до потреб


0

У моєму випадку після тестування всіх цих варіантів і все ще виникли проблеми, які я спробував, sudo git rebase --abortі це все зробило


Будьте обережні, якщо ви робите це посеред фактичної бази. Щойно втратив зміни: '(
Freeman L

Це було визнано "пошкодженим", тоді ви почнете
спочатку з базою даних


0

Якщо ви перебуваєте нижче стану, а база даних більше не працює,

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

Потім спочатку біжи,

$ git rebase -quit

А потім відновіть попередній стан з reflog,

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

Використовуючи,

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

-3

Я використовую git у затемненні, і у мене була така ж проблема.

Врешті-решт я виявив, що запис меню "Rebase ..." тимчасово перетворений на підменю.

Команда-> База даних -> Відмінити

Це працювало для мене.

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