Git - Как исправить "поврежденную" интерактивную ребазу? - PullRequest
96 голосов
/ 10 сентября 2010

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

Ответы [ 17 ]

92 голосов
/ 10 сентября 2010

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

85 голосов
/ 21 января 2011

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

40 голосов
/ 28 февраля 2019

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

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

7 голосов
/ 04 апреля 2014

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

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

6 голосов
/ 27 марта 2015

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

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

В Process Explorer найдите> Обработка файлов или DLL..

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

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

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

4 голосов
/ 06 апреля 2015

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

touch .git/rebase-merge/head-name

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

2 голосов
/ 20 февраля 2019

В моем случае eighter git rebase --abort и git rebase --continue выдавали:

Ошибка: невозможно прочитать «.git / rebase-apply / head-name»: Нет такого файла или каталога

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

1 голос
/ 24 октября 2013

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

1 голос
/ 09 марта 2016

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

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

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

1 голос
/ 28 марта 2019

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

...