Как исправить поврежденную интерактивную перебазировку?

Мне удалось создать небольшой беспорядок в моем локальном репозитории git. Я пытался исправить неработающую фиксацию, используя следующие инструкции. Перед запуском «git commit --amend» (и после git rebase --interactive) я решил, что мои изменения неверны, и выполнил «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 --continue:

$ 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 log --oneline показывает ситуацию:

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

И это нормально.

Я использую msysgit v1.7.0.2.


person Mikael Koskinen    schedule 10.09.2010    source источник
comment
git rebase --quit работал у меня   -  person Juan Caicedo    schedule 04.12.2019
comment
@JuanCaicedo Это помогло мне решить мою поврежденную перебазировку git. Спасибо   -  person philomath    schedule 30.03.2021


Ответы (19)


Похоже, Git пытался удалить каталог .git/rebase-merge, но не смог удалить его полностью. Вы пробовали скопировать эту папку? Также скопируйте папку .git/rebase-apply, если она есть.

person Martin Owen    schedule 10.09.2010
comment
Спасибо что подметил это. Я смог решить свою проблему, просто перезагрузив компьютер. Я не уверен, что пошло не так, потому что каким-то образом каждый доступ к папке .git \ rebase-merge вызывал ошибку отказа в доступе. - person Mikael Koskinen; 13.09.2010
comment
Перезагрузка у меня не сработала, но git rebase --abort (из stackoverflow.com/a/4757777/146044) сработало работать. - person backus; 28.03.2016
comment
Просто перезапуск оболочки git (Windows) сработал для меня (git rebase --abort не работал) - person mhand; 31.03.2016
comment
слово предупреждения ... у меня было 4 часа изменений в моем рабочем каталоге, когда я заметил поврежденную ошибку перебазирования. попробовал git rebase --abort он стер мои неустановленные изменения ... ошибка исчезла, хотя - person George Ananda Eman; 26.09.2016
comment
перезагрузка или git rebase --abort по-прежнему давали мне ошибки. git rebase --quit работал у меня. - person Flávio Rodrigues; 12.04.2019
comment
Удаление REBASE_HEAD, rebase-apply / и rebased-patches в .git сработало для меня - person MyrionSC2; 02.04.2020
comment
git rebase --quit работал у меня, но я потерял все автоматически сохраненные изменения, такие как @GeorgeAnandaEman = ›их можно восстановить, используя ответ в stackoverflow.com/questions/37845799/, объясняя, как посмотреть все коммиты autostash - person tiho; 15.07.2020
comment
Для пользователей IntelliJ: Git ›Rebase ...› Abort Rebase. - person Trayan Momkov; 17.02.2021

Я застрял в этом. Я создал файл с именем заголовка, а затем столкнулся с другой ошибкой, сказав, что он не может найти файл, поэтому я создал этот файл. Затем я получил другую ошибку: не могу прочитать '.git / rebase-apply / on': нет такого файла или каталога.

Итак я просмотрел документацию git для перебазирования и нашел другую команду:

git rebase --quit

Это вернуло меня к своей ветке без каких-либо изменений, и я мог снова начать перебазирование, как новое.

person Laura Slocum    schedule 28.02.2019
comment
git rebase --quit было оно! - person Steven Shaw; 25.06.2019
comment
--quit работал. --abort не сделал этого, потому что перебазирование было отменено на полпути - person Kalob Taulien; 28.09.2019
comment
У меня была аналогичная ошибка, связанная с перебазированием, только с другим сообщением об ошибке. Пробовал: $ git rebase --abort Вывод: error: could not read '.git/rebase-apply/head-name': No such file or directory Наконец, это решение решает мою проблему: git rebase --quit - person aff; 14.11.2019
comment
Проголосовали. git rebase --quit абсолютно спас меня. Симптомы те же, что и описанные, но у меня возникли после попытки выполнить git pull --rebase, которая по какой-то причине потерпела неудачу. Обратите внимание, что у меня был включен autostash (git версия 2.27.0.windows.1) и одновременно был запущен VS2019 (указано на это репо) - подозреваю, что какая-то их комбинация испортила его. - person ErrCode; 10.06.2020
comment
Как обычно, замечательно, когда вы видите хороший вопрос с высоким рейтингом о git: прокрутите вниз, алмаз там! :) - person Roman Badiornyi; 27.05.2021

У меня была аналогичная проблема из-за процесса zombie vim.exe. Убил его в диспетчере задач, а затем git rebase --abort исправил.

person user584317    schedule 21.01.2011
comment
это тоже была моя проблема. Я использовал команду sysinternals handle и увидел, что процесс (sh.exe) заблокировал файл. Использование pskill <pid> исправило это для меня. - person Paul Oliver; 18.08.2015
comment
У меня была такая же проблема, но с Sublime Text для меня. - person Toivo Säwén; 19.01.2020

Спасибо @Laura Slocum за ваш ответ

Я все испортил при перебазировании и получил отдельную ГОЛОВУ с

 error: could not read orig-head

это помешало мне закончить ребазинг.

Отсоединенная ГОЛОВА, похоже, содержит именно мое правильное желаемое состояние перебазирования, поэтому я запустил

rebase --quit

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

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

person Ruth    schedule 12.07.2019

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

Выполнение git rebase --abort из Git Bash у меня сработало.

person Praveen Hiremath    schedule 04.04.2014

В Windows, если вы не хотите или не можете перезагрузить компьютер, см. Ниже.

Установите Process Explorer: https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

В Process Explorer выберите Find> File Handle или DLL ...

Введите имя файла, указанное в ошибке (для моей ошибки это было «git-rebase-todo», но в вопросе выше «готово»).

Обозреватель процессов выделит процесс, удерживающий блокировку файла (для меня это был grep).

Завершите процесс, и вы сможете отменить действие git стандартным способом.

person Darren Yeats    schedule 27.03.2015

Создайте файл с таким именем:

touch .git/rebase-merge/head-name

и чем использовать git rebase

person Tehila Dabush    schedule 06.04.2015

В моем случае eighter git rebase --abort и git rebase --continue бросали:

ошибка: не удалось прочитать '.git / rebase-apply / head-name': нет такого файла или каталога

Мне удалось решить эту проблему, вручную удалив: .git\rebase-apply directory.

person Dariusz    schedule 20.02.2019

Я использую git version 2.19.2.windows.1.

единственное, что у меня сработало, это удалить каталог .git/rebase-apply/ и выполнить git reset --hard.

person Spongman    schedule 06.12.2018

В моем случае это произошло потому, что я открыл журнал SmartGit в соответствующем проекте Git и Total Commander в соответствующем каталоге проекта. Когда я закрыл оба, я смог без проблем перебазировать.

Чем больше я думаю об этом, тем больше подозреваю, что Total Commander, то есть Windows, заблокировала открытый каталог, с которым git rebase пытался что-то сделать.

Дружественный совет: когда вы пытаетесь что-то исправить, всегда вносите одно изменение за раз. ;)

person meridius    schedule 09.03.2016

Я пробовал все вышеупомянутые шаги, но у меня ничего не помогло. Наконец, перезагрузка компьютера решила эту проблему: D

person Mohammed Asif    schedule 03.01.2019

С SublimeText 3 в Windows проблема решается простым закрытием окон Sublime, используемых для интерактивной версии фиксации.

person LeBorgne    schedule 28.03.2019

Если вы получили состояние ниже и перебазирование больше не работает,

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

Тогда сначала запустите,

$ git rebase -quit

А затем восстановить предыдущее состояние из рефлога,

$ 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
person Sazzad Hissain Khan    schedule 10.05.2020

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

person diptia    schedule 24.10.2013

У меня такая же проблема. Я использовал обозреватель процессов, как было предложено в другом сообщении (я не могу найти этот пост), и выяснил, какой процесс заблокировал файл, и убил его. затем выполните --continue или --abort в соответствии с потребностями

person user3739537    schedule 09.07.2014

В моем случае, после тестирования всех этих параметров и по-прежнему возникших проблем, я попробовал sudo git rebase --abort, и он все сделал

person Dani.Rangelov    schedule 03.05.2016
comment
Будьте осторожны, если вы делаете это в середине фактического перебазирования. Только что потерял свои изменения: '( - person Freeman L; 11.09.2017
comment
Он считался поврежденным, тогда вы начинаете заново с перебазирования - person Dani.Rangelov; 12.09.2017

пробовал все остальное, кроме перезагрузки, у меня сработало rm -fr .git/REBASE_HEAD

person Jeremy Vaught    schedule 07.05.2019

Это сработало для меня и будет работать именно для того, что опубликовал OP (ошибка перебазирования, которая просто не идет):

brew update-reset
brew update

Я нашел этот драгоценный камень здесь.

person YetAnotherBot    schedule 04.06.2021

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

В конце концов я обнаружил, что пункт меню «Rebase ...» был временно преобразован в подменю.

Команда-> Rebase -> Abort

У меня это сработало.

person Shiva Agrawal    schedule 14.10.2014