2013-11-30 4 views
0

У меня есть мастер филиал и этап филиал.обратный git rebase рабочий процесс

Теперь обычный рабочий процесс является то, что новые изменения происходят в мастере затем от постановки Я бег

git rebase master.

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

+0

Вы попробовали переустановить мастера на стадии постановки? 'git checkout master'' git rebase staging' – Aiias

+0

Это может быть беспорядок ... Если есть только несколько конкретных изменений, вы можете попробовать использовать вишню в мастер. – Iguananaut

ответ

1

Ребаза постановки на мастер. Вы будете иметь это:

  | 
master - o 
     | 
     x 
     | 
     x - staging 

Вы хотите:

  | 
     o 
     | 
     x 
     | 
master - x - staging 

Там только одна операция, которую нужно сделать. Задайте мастер, чтобы указать на то же самое, что и в пунктах постановки. Существует множество способов установить мастер для указания того же фиксации, что и постановка; вот один из них:

git checkout master 
git reset staging 

Простая тяга также должна быть эквивалентной. Поскольку мастер является предком постановки, сливаясь постановка будет быстро вперед, если вы не настроили --no-ff где-то, что мы можем обнаружить с --ff-only:

git checkout master 
git pull --ff-only staging 

Edit: если есть совершает вы не хотите добавить обратно в мастера, сделать новую ветвь, а затем использовать перебазироваться -i, чтобы сохранить только коммиты, которые должны вернуться в мастер, как это:

git checkout staging 
git checkout -b mypics 

Уступая

  | 
master - o 
     | 
     y 
     | 
mypics - x - staging 

перебазирования mypics, опустившись у, создавая х ':

git rebase -i master 
# Drop the lines with commits you don't want to send back to master. 

     | 
master - o 
     | \ 
     y x' - mypics 
     | 
     x - staging 

Затем установите мастер, чтобы указать на то же самое, как совершить mypics, используя сбросить или тянуть, как описано выше. Затем снимите мыло:

git checkout master 
git reset mypics 
git branch -D mypics 
+0

Кстати. Я на 99% уверен, что это работает точно так же, как рекламируется, но создайте резервную копию своего репо, прежде чем делать это. – masonk

+0

Я делаю это ежедневно и никогда не архивирую (история все неизменна, reflog помогает вам найти потерянные коммиты), но я бы посоветовал убедиться, что у вас нет каких-либо незавершенных изменений в рабочем дереве до 'reset -hard' или вы потеряете их навсегда. –

+0

Вы правы. Я достал .... Если у него грязное рабочее дерево, он объяснит ему, и он может решить, что делать. – masonk

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