Git rebase ветвь на master не удалось, как решить?
Я работал над локальной копией удаленного репозитория git.
Я создал ветку на моей локальной копии, позвольте назвать ее "my_branch".
Я сделал несколько раз на my_branch.
Недавно я нажал "my_branch" на удаленный. Однако я не знал, что кто-то еще добавил версию для удаленного мастера. Итак, я принесли его своему местному хозяину.
Итак... короткая история, мое местное репо выглядит следующим образом (я пытаюсь использовать соглашение о схемах здесь).
--C0--------------C7-- (local master)
\
--C1-C2-C3-- (local my_branch)
\
--C4-C5-C6-- (local sandbox_branch)
Я хочу, чтобы он выглядел так:
--C0--------------C7-- (local master)
\
--C1'-C2'-C3'-- (local my_branch)
\
--C4'-C5'-C6'-- (local sandbox_branch)
Я попытался перезагрузить my_branch ONTO локальный мастер, но получил это сообщение об ошибке (я использую визуальный инструмент для git, называемый GitX):
Rebase Failed!
There was an error rebasing HEAD with branch 'master'.
command: git rebase refs/heads/master
It seems that I cannot create a rebase-apply directory, and
I wonder if you are in the middle of patch application or another
rebase. If that is not the case, please
rm -fr /my_project_directory/.git/rebase-apply
and run me again. I am stopping in case you still have something
valuable there.
Что я делаю неправильно? Как я должен справиться с этим? Если бы я должен был сделать это в командной строке, то какая команда приведет меня к состоянию на диаграмме выше?
ОБНОВЛЕНИЕ 1
Кстати, я не нахожусь в середине патча приложения или другой rebase... по крайней мере, не преднамеренной.
После того, как я узнал, что пульт был обновлен ПОСЛЕ того, как я нажал, я сделал выборку. Может ли это сделать что-нибудь, чтобы GitX подумал, что я нахожусь в середине патча приложения или другой rebase?
Я также обновил диаграмму, чтобы быть более точным. От моей ветки есть ветка. Я не включил его в исходный вопрос b/c. Я не думал, что это имеет значение. Я включаю на всякий случай...
ОБНОВЛЕНИЕ 2
FYI... Дерево мастеров для 'local' и для 'remote' похоже на диаграмму, которую я рисовал, за исключением того, что у нее нет sandbox_branch.
Ответы
Ответ 1
git rebase обнаружил каталог .git/rebase-apply
и поэтому предполагает, что вы можете оказаться в середине rebase. Это произошло бы, если бы был конфликт во время предыдущей перезагрузки, и rebase не был закончен; т.е. вы не запускали один из git rebase --abort
, git rebase --skip
или git rebase --continue
(последний после разрешения конфликта).
В любом случае, неважно, как вы попали в это состояние, если не думаете, что вы вообще перезапустили git. Просто rm -fr /my_project_directory/.git/rebase-apply
, как подсказывает подсказка, и вы должны иметь возможность сделать rebase сейчас.
Но подождите. Поскольку вы говорите, что вы уже опубликовали свою ветку в удаленном репозитории, вам не следует пытаться переустановить мастер на нее. Фактически, если ваш пульт настроен на отказ от компрометации без перемотки вперед (что, как представляется, рекомендуется в большинстве случаев рекомендуется), вы даже не сможете нажать на изменения rebase'd на свой пульт. В целом, это плохая практика, чтобы попытаться изменить фиксацию (что делает git rebase
) после того, как вы опубликовали ее на удаленном компьютере.