2012-01-08 3 views
8

Я работаю над локальной копией удаленного репозитория git. Я создал ветку на моей локальной копии, назовем ее «my_branch». Я сделал несколько раз на my_branch.Git rebase ветвь на master не удалось, как решить?

Я недавно нажал «my_branch» на удаленный. Однако я не знал, что кто-то еще добавил версию для удаленного мастера. Итак, я принесли его своему местному хозяину.

Итак ... короткая история, мое местное репо выглядит следующим образом (я пытаюсь использовать диаграммное соглашение here).

--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 местного мастера, но я получил сообщение об ошибке (я использую визуальный инструмент для мерзавца под названием 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. 

Что я делаю неправильно? Как я должен справиться с этим? Если бы я должен был сделать это в командной строке, то какая команда приведет меня к состоянию на диаграмме выше?

UPDATE 1

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

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

UPDATE 2

FYI ... Мастер дерево для «местных» и «удаленного» выглядит как диаграмма, что я нарисовал, за исключением того, что Безразлично» t имеет sandbox_branch.

+0

Вы пробовали 'git rebase -abort'? –

+0

«Похоже, что я не могу создать каталог для переадресации, и Интересно, находитесь ли вы в середине приложения-патча или другом rebase« <- это случай? – fge

+0

@fge. Хороший вопрос. Я обновил описание. – milesmeow

ответ

24

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

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

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

+0

О, о ... Так что мне делать? Я довольно новичок в git. 'git rebase -abort' сначала? FYI ... Дерево мастеров для «local» и «remote» похоже на диаграмму, которую я рисовал, за исключением того, что у нее нет sandbox_branch. – milesmeow

+0

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

+0

Вы хотите опубликовать эти изменения на удаленный мастер? Если да, вы должны объединить ветвь в мастер и нажать на пульт. Если вы просто хотите убедиться, что последние изменения от мастера также являются частью вашего филиала, объедините мастер в свою локальную ветку и нажмите на свой пульт. –

Смежные вопросы