выполняется переустановка. Невозможно зафиксировать. Как продолжить или остановить (отменить)?


140

Когда я бегу:

git status

Я вижу это:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Когда я делаю:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Я вижу: rebase-apply

Я не могу указать происхождение.

git branch

шоу:

* (no branch, rebasing master)
  develop
  master

Я застрял. Я не знаю что делать? Неужели перезагрузка занимает столько времени? git rebase --continueничего не делает. У меня в git status ничего нет .. Жду ребаза. Что я могу сделать?

UDATE: это результат: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

git add. ничего не имеет.

Ответы:


258

Rebase не происходит в фоновом режиме. «Выполняется перебазирование» означает, что вы начали перебазирование, и оно было прервано из-за конфликта. Вы должны возобновить rebase ( git rebase --continue) или прервать его ( git rebase --abort).

Как следует из сообщения об ошибке git rebase --continue, вы попросили git применить патч, который приводит к пустому патчу. Скорее всего, это означает, что патч уже был применен и вы хотите сбросить его с помощью git rebase --skip.


Я обновил сообщение, включив в него git rebase - continue по вашему запросу.
Джозеф Чемберс,

2
ОК, значит, "перебазировать - продолжить ничего не делать" было неточно. Вы должны были написать «git rebase - продолжить ошибки следующим образом ...», чтобы получить помощь.
Matthieu Moy

3
Документация по этому поводу очень плохая, она постоянно повторяет, что вы «git rebase --continue», и в конечном итоге будете бесконечно говорить это.
Жан-Поль

6
git rebase --skip сделал это!
Borzh 03

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

11

Я застрял в статусе перебазирования, я получил

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

но бег git rebase --skipуступил место error: could not read '.git/rebase-apply/head-name': No such file or directory.

Бег rm -fr ".git/rebase-apply"помог.

Примечание: конечно, делайте это только в том случае, если вас не волнует перебазирование или если вы застряли на предыдущем перебазировании, которое вам больше не нужно.


9
  • Шаг 1. Продолжайте git rebase --continue

  • Шаг 2: устраните КОНФЛИКТЫ, затем git add .

  • Вернемся к шагу 1, теперь, если он говорит, no changes ..то бегите, git rebase --skipвернитесь к шагу 1

  • Если вы просто хотите выйти из перезагрузки, запустите git rebase --abort

  • Как только все изменения будут сделаны, запустите, git commit -m "rebase complete"и все готово.


Это --continueне сработало, это сказало мне, что ничего не изменилось ... Но как только я сделал --skip, я мог просто push. Я просто не понимаю этого. Как будто я каждый раз делаю совершенно случайные вещи, пока это не сработает.
Алексис Вилке,

1
@AlexisWilke Да, вы должны сделать это, --skipкогда нет изменений, чтобы вы могли продолжить перебазирование при следующей фиксации из основной ветки. Что на самом деле происходит, так это то, что вы воспроизводите все свои изменения (в текущей ветке) в основной ветке, чтобы вы были в курсе основной ветки, а также поместили свои изменения после этого. Пройдите: git-scm rebasing (пройдите только The Basic Rebase по ссылке, и вы должны получить хорошее представление о том, что происходит).
Ани Менон,

6

Вы сказали своему репозиторию переустановить. Похоже, вы совершили фиксацию (идентифицированную SHA 9c168a5), а затем сделали git rebase masterили git pull --rebase master.

Вы переустанавливаете мастер ветки на этот коммит. Вы можете завершить перебазирование с помощью git rebase --abort. Это вернет состояние, в котором вы были до того, как начали перебазирование.


Я никогда не делаю git rebase/pull --rebase master. Я часто попадаю в это состояние ... из-за конфликта. Я меняю файл, делаю вытягивание, восстанавливаю свои изменения, и новый патч оказывается пустым, что вредит мозгу git, который затем решает войти в этот "режим перебазирования" ...
Алексис

6

Я недавно попал в это состояние. После разрешения конфликтов во время перезагрузки я зафиксировал свои изменения, а не запустил git rebase --continue. Это дает те же самые сообщения , которые вы видели , когда вы запускали свою git statusи git rebase --continueкоманду. Я решил проблему, запустив git rebase --abort, а затем повторно запустив перебазирование. Скорее всего, можно было бы пропустить перебазирование, но я не был уверен, в каком состоянии я останусь.

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean

В дополнение к --abort(+1) у вас теперь есть --quit( stackoverflow.com/a/41363262/6309 )
VonC

После исправления конфликтов. затем вызовите git commit. выполните другую работу, затем снова вызовите git commit. Если использовать этот метод git rebase --abort, вся работа, которую вы выполняете после конфликта фиксации, будет удалена. Так что будьте осторожны
Джин

4

Если git rebase --abortне работает и вы все равно получаете

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

Тип:

git rebase --quit

0

Я насторить gitк autorebase на аgit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

В противном случае он автоматически объединяется при переключении между ветвями, что я считаю наихудшим вариантом по умолчанию.

Однако у этого есть побочный эффект, когда я переключаюсь на ветку и git cherry-pick <commit-id>попадаю в этот странный состоянии каждый раз, когда возникает конфликт.

На самом деле мне нужно прервать rebase, но сначала я исправляю конфликт, git add /path/to/fileфайл (еще один очень странный способ разрешить конфликт в этом случае ?!), а затем выполняю git commit -i /path/to/file. Теперь я могу прервать rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

Второй git commit .вроде как от аборта. Я исправлю свой ответ, если узнаю, что мне нужно прервать операцию rebaseраньше.

--forceНа толчке требуется , если вы пропустите другие фиксации и обе ветви не гладкие (оба отсутствуют коммиты из других).


«Иначе он автоматически сливается при переключении между ветками» - гм, нет. Git не выполняет никакого слияния или перестановки при переключении веток. autosetupmergeимеет отношение к тому, как git pullнастроен для новых веток.
Marnen Laibow-Koser

В то время, когда я боролся с этой проблемой, он определенно сделал какое-то слияние различного кода. Моя текущая установка, похоже, не затрагивает эту проблему. Также существует проблема, заключающаяся в том, что вы не выполнили фиксацию + нажатие вашей текущей ветки перед попыткой переключения.
Alexis Wilke

Git сообщит вам, помешают ли ваши незафиксированные изменения переключаться между ветвями, так что здесь не о чем беспокоиться, не так ли? Или ты о другом?
Marnen Laibow-Koser

0

Другой вариант ABORT / SKIP / CONTINUE из IDE

VCS> Git> Прервать ребазинг

введите описание изображения здесь


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.