Git перебазировать ветку на мастер не удалось, как решить? - PullRequest
14 голосов
/ 08 января 2012

Я работал над локальной копией удаленного репозитория 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

Кстати, яне в середине патча приложения или другой перебазировки ... по крайней мере, не преднамеренно.После того, как я узнал, что пульт был обновлен ПОСЛЕ того, как я нажал, я сделал выборку.Могло ли это что-то сделать, чтобы заставить GitX думать, что я нахожусь в центре патча приложения или другого ребазинга?

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

ОБНОВЛЕНИЕ 2

К вашему сведению ... Главное дерево для «локальных» и для «удаленных» выглядит как диаграммачто я нарисовал, за исключением того, что у него нет sandbox_branch.

1 Ответ

30 голосов
/ 08 января 2012

git rebase обнаружил каталог .git/rebase-apply и предполагает, что вы находитесь в середине перебазирования. Это произошло бы, если во время предыдущей перезагрузки возник конфликт, и эта перезагрузка не была завершена; то есть вы не запускали одну из git rebase --abort, git rebase --skip или git rebase --continue (последней после разрешения конфликта).

В любом случае, не имеет значения, как вы оказались в этом состоянии, если не думаете, что запускали git rebase вообще. Просто rm -fr /my_project_directory/.git/rebase-apply, как подсказывает подсказка, и вы сможете сделать ребаз сейчас.

Но подожди. Поскольку вы говорите, что уже опубликовали свою ветку в удаленном репозитории, вам не следует пытаться перебазировать master на нее. Фактически, если ваш пульт настроен на запрет фиксаций без ускоренной пересылки (что, как правило, рекомендуется), вы даже не сможете отправить изменения rebase'd на ваш пульт. В общем, плохая практика - пытаться изменить коммит (что делает git rebase) после публикации его на удаленном компьютере.

...