выполняется ребазинг. Не удается зафиксировать. Как продолжить или остановить (отменить)?
Когда я запускаю:
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. Я просто жду обновления. Что я могу сделать?
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 добавить. ничего не имеет.
Ответы
Ответ 1
Rebase не происходит в фоновом режиме. "rebase in progress" означает, что вы начали rebase, и rebase прервали из-за конфликта. Вы должны возобновить rebase
(git rebase --continue
) или прервите его (git rebase --abort
).
Как следует из сообщения об ошибке из git rebase --continue
, вы попросили git применить патч, который приводит к пустующему патчу. Скорее всего, это означает, что патч уже был применен, и вы хотите отказаться от него, используя git rebase --skip
.
Ответ 2
Вы сказали, что ваш репозиторий переустанавливается. Похоже, вы были на фиксации (идентифицированы SHA 9c168a5), а затем сделали git rebase master
или git pull --rebase master
.
Вы переустанавливаете мастер ветки на этот фиксатор. Вы можете завершить rebase через git rebase --abort
. Это вернет вам состояние, в котором вы были, до того, как вы начали перезаряжаться.
Ответ 3
Недавно я попал в это состояние. После разрешения конфликтов во время перезагрузки я совершил свои изменения, а не выполнил git rebase --continue
. Это дает те же сообщения, которые вы видели при запуске команд git status
и git rebase --continue
. Я решил проблему, запустив git rebase --abort
, а затем перезапустив rebase. Вероятно, вы также можете пропустить rebase, но я не был уверен, в каком состоянии вы меня оставите.
$ 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
Ответ 4
-
Шаг 1: Продолжайте git rebase --continue
-
Шаг 2: исправьте конфликты, затем git add.
-
Вернуться к шагу 1, теперь, если он говорит, что no changes..
затем запустите git rebase --skip
затем вернитесь к шагу 1
-
Если вы просто хотите выйти из rebase, запустите git rebase --abort
-
Как только все изменения сделаны, запустите git commit -m "rebase complete"
и все готово.
Ответ 5
Я настроил свой 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
на нажатие требуется, если вы пропустите другие коммиты, и обе ветки не являются гладкими (обе они не комментируют друг друга).
Ответ 6
Другой вариант, чтобы ABORT/SKIP/ПРОДОЛЖИТЬ из IDE
VCS> Git> Abort Rebasing
![enter image description here]()
Ответ 7
Я застрял в "состоянии перебазирования", я получил
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"
помог.
Примечание: конечно, делайте это только в том случае, если вас не волнует перебазирование или если вы застряли на предыдущем ребазе, который вам больше не нужен.