2014-12-08 5 views
1

У меня есть следующая ситуация в моей отрасли: enter image description hereперебазироваться филиал в историю сквоша со слиянием совершает

Как вы можете видеть, другая ветвь (зеленый) была создана из нашей основной ветви (красная) некоторое время назад, некоторые фиксирует, где добавлено, и затем оно было объединено обратно в нашу основную ветку, которая в то время не получала никаких коммитов. С тех пор еще несколько коммитов были добавлены в красную ветку, поэтому наша голова на самом деле немного дальше влево.

Как я мог бы переустановить эту ветвь на себя (первый совершить весь путь вправо), чтобы выкачать ее историю фиксации, включая все фиксации из зеленой ветви в красную ветку (так что у меня на самом деле есть только одна ветвь слева)?

EDIT мне удалось решить с помощью мягкой перезагрузки ГОЛОВУ обратно в е, давя все, прежде чем, то мягкий сброс ветвь а, совершая б, в и г на а, а затем применяя мои спрятали содержимое. Быстро и работал как шарм!

Благодарим за помощь!

+1

* Сквош * неправильный термин, здесь. Вы хотите * rebase *, а не squash. Кроме того, в идеале для вашего вопроса вы должны указывать имена и подсказки обеих ветвей на своих графиках фиксации. В любом случае, что вам нужно сделать, это проверить ветвь интереса, а затем запустить 'git rebase '. – Jubobs

+0

Было бы очень полезно для начинающих git, если бы вы добавили подробное, пошаговое описание вашего решения. – K4GDW

ответ

1

заказ новый филиал на основе фиксации d

git checkout -b RB d 

         main 
         | 
         V 
a----------------e----f 
\   /
    b------c-----d 
      ^
       | 
       RB 

перебазироваться вашего main филиалом

git rebase main 

         main 
         | 
         V 
a----------------e----f 
\   /
    b------c-----d----e'-----f' 
         ^
          | 
          RB 

переключателя обратно в основную ветку и сбросить его в нормированных ветви

git checkout main 
git reset --hard RB 

          main 
          | 
          | 
a----------------e----f | 
\   /  V 
    b------c-----d----e'-----f' 
         ^
          | 
          RB 

git gc очистит фиксирует e и f один день, потому что на них больше не ссылаются.

Так ваше хранилище будет выглядит как этот день

      main 
          | 
          V 
a---b----c----d----e'-----f' 
         ^
          | 
          RB 

Пока мерзавец дс не устранил e и f вы можете восстановить их с помощью их совершения идентификатор.

git checkout -b restored_main f 
+0

Я отмечу это как правильное, хотя его не так, как я решил свои проблемы :) – Eisenhorn

+1

@Eisenhorn Возможно, вы также можете добавить свое решение в качестве ответа. Если это хороший ответ, вы получите преимущество, и если вы пропустите что-то, вы получите комментарии. ;) –

-1

Попробуйте интерактивное перебазирование с помощью команды:

мерзавца перебазироваться -i HEAD ~ 6

Это всплывающий блокнот с последними 6 фиксациями. Вам не нужно будет изменять это только «Сохранить и закрыть». После завершения переадресации ваша история фиксации должна быть прекрасной.

+0

Это не даст мне возможность включить коммиты из зеленой ветки. – Eisenhorn

+0

Я предполагаю, что это будет, вы пробовали? –

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