2015-02-25 2 views
3

Изначально у меня было что-то вроде этого:Как я могу переустановить часть ветки на главную ветку?

 C---D (branch1) 
    /
A---B (master) 

Потому что мне нужно работать над чем-то еще (что не было связано с branch1), я решил сделать новую ветвь (так называемый branch2). Я сделал пару коммитов на branch2, а затем толкнул их.

Теперь, у меня было намерение иметь master в качестве корня branch2. Тем не менее, я случайно сделал это:

  E---F--G (branch2) 
     /
     C---D (branch1) 
    /
A---B (master) 

Есть чистый способ сделать branch2 стебель непосредственно из master, как показано ниже?

E---F--G (branch2) 
    |  
    | C---D (branch1) 
    |/ 
A---B (master) 

ответ

3

ASCII-графики в вашем вопросе есть странное сходство с теми, во втором примере, описывающее использование в --onto флага в git-rebase man page:

Другой пример --onto опции перебазировать часть отделение. Если мы имеем следующую ситуацию:

  H---I---J topicB 
     /
     E---F---G topicA 
    /
A---B---C---D master 

затем команду

git rebase --onto master topicA topicB 

приведет к:

 H'--I'--J' topicB 
    /
    | E---F---G topicA 
    |/ 
A---B---C---D master 

Этот пример показывает, что вы приземлитесь в нужном положении с помощью бег

git rebase --onto master branch1 branch2 

Как бы то ни было, вы также указали, что вы уже нажали branch2 на какой-то отдаленный, когда ваше репо выглядело как ваш второй график ASCII. Вы делитесь данным вопросом с кем-то другим? В этом случае подумайте дважды (или трижды!) До перезагрузки, так как это форма перезаписи истории и you should never rewrite history has been shared.

+1

Отличный ответ! Я даже не знал о 'git rebase on', и я считаю себя экспертом в Git rebasing. @ Løiten Пожалуйста, проверьте, не удалил ли кто-нибудь ветку2, так как вы ее нажали. Если нет, вы можете сделать «git push origin branch2 --force», чтобы принудительно перевести ветвь на удаленный. –

+1

Правильный ответ. Возможно, что он столкнется с конфликтами, но если изменения в EFG связаны с изменениями на компакт-диске. – chmike

+0

@chmike Не должно возникать конфликтов, в данном случае: 'git-rebase' будет знать, что делать без вмешательства пользователя, потому что операция просто состоит в воспроизведении кучки коммитов поверх старшего предка. – Jubobs

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