2016-07-21 2 views
0

У меня есть структура мерзавец отрасли какПереместить одну ветку git в другую с разными родителями?

 feature 
    /
    /
o master 
    \ 
    \ 
    develop 

master и develop в настоящее время одинаковы, то есть никаких дополнительных фиксаций в develop.

Теперь я хочу, чтобы переместить родительский feature ветвь к develop, так что структура становится:

o master 
    \ 
    \ 
    develop 
     \ 
     \ 
     feature 

Не нужно, чтобы сохранить совершить историю feature. Я просто хочу переместить текущее состояние feature в ветку, чей родительский номер develop. Это необходимо для того, чтобы в будущем его можно было объединить с develop без ущерба для master.

Я новичок в git и понятия не имею о слиянии/переустановке и т. Д. Подробные шаги будут оценены.

+1

В ветке нет родительской ветви. Как сказал @axiac, делать нечего. Филиалы указывают на фиксацию, а не на другие ветви. – Ikke

ответ

1

Мастер и разработка в настоящее время такие же, т. Е. Никаких дополнительных коммитов в разработке.

Тогда вы уже готовы. Вам не нужно ничего делать. Филиалы не связаны с другим, т. Е. Нет понятия «родительская ветвь» в git.

Ветвь - это просто имя, указывающее на фиксацию, алиас, если хотите. Конец «есть» (в буквальном смысле) критическое хэш-значение, с которым вы привыкли работать (т. Е. Показано git log). Самими коммитами являются фактические объекты «первого класса», ветка - это просто пара строк (одно - это имя, другое - хеш-фиксация).

Теперь я хочу, чтобы переместить родителей эту ветку, чтобы разработать

Вот что git rebase, или в вашем случае git rebase feature develop для. Он делает именно то, что вы просите, и отлично подходит для этой работы. В вашей конкретной ситуации, где develop и master указывают на одно и то же совершение, это нет-op, но в любом другом случае, где develop перешел от master, вы будете использовать rebase.

Кстати, вы найдете много советов, чтобы избежать rebase, просто игнорируйте это пока. Это потрясающий инструмент в git, если только он не встречается с предрассудками или невежеством. Необходимо проявлять осторожность при совместной работе с другими (т. Е. С распределенными репозиториями, push/pull); вы не можете ничего сломать, просто сделайте это тяжело для ваших коллег. Но это еще один вопрос.

+0

Спасибо за подробности и ссылки на введение. – UditS

+0

У меня есть один вопрос - когда функция объединена в разработку, будет ли она влиять на мастера? – UditS

+1

Нет, не будет. – AnoE

2

master и develop На данный момент одинаковы, то есть никаких дополнительных фиксаций в develop.

Вам не нужно ничего делать. Ваше репо уже находится в статусе, который вы хотите.

Однако только добавленная ветка изменяется, когда вы добавляете новые коммиты; остальные остаются там, где они есть. Это означает, что если вы проверите develop и зафиксируете на нем что-то, ваше репо достигнет статуса, описанного на первой диаграмме.

Команда вам нужно пойти положить его в состоянии, описанном во второй диаграмме:

git rebase develop feature 

В качестве альтернативы, вы можете сделать:

git checkout feature 
git rebase develop 

Это то, что первая форма команды делает внутренне.

Как и любая команда Git, которая управляет историей, для ее работы требуется чистый рабочий каталог. Вы должны совершать (или хранить) все, прежде чем выполнять переустановку.

+0

Спасибо за детали. – UditS

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