Git - Как исправить "поврежденную" интерактивную rebase?

Мне удалось создать небольшой беспорядок в локальном репозитории 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 --online показывает ситуацию:

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

И это прекрасно.

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Поэтому я посмотрел документацию по git для перебазирования и нашел другую команду под названием git rebase --quit. Это вернуло меня к моей ветке без изменений, и я мог начать заново, как новый.

Ответ 4

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

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

Ответ 5

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

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

В Process Explorer, Find > File Handle или DLL...

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

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

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

Ответ 6

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

touch .git/rebase-merge/head-name

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

Ответ 16

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

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

 error: could not read orig-head

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

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

rebase --quit

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

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

Ответ 17

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

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

Team- > Rebase → Abort

Это сработало для меня.