2015-10-04 3 views
0

Преподаватели одного из моих классов решили создать единый репозиторий с папками для каждого назначения класса, в котором я сейчас. Это не моя первая кисть с git или github, но эта настройка очень подвержена путанице.Git: Перемещение ветки, основанной на другой, основываясь на главном

Каждое задание обрабатывается как ветка, и для «отправки» его в качестве нашей окончательной версии мы создаем запрос на извлечение обратно на главный. Это очень легко. Но я только начал работать над новым проектом, а также в создании своего филиала, я, казалось бы, были включены все коммиты для предварительного проекта, так что мой репо выглядит следующим образом:

{ Project A Commits } { Pr. B Commits } 
    --o--o--o--o---o----o------------o----o ProjectB 
/
o---------------------------------------- master 
\ 
    --o--o--o--o---o----o ProjectA 

Когда это действительно должен выглядеть следующим образом:

----o----o ProjectB 
/
o---------------------------------------- master 
\ 
    --o--o--o--o---o----o ProjectA 

Я знаю, что есть такая вещь, как rebase, но это, кажется, относится к нескольким различным сценариям, чем рассол я ввязался. Я действительно не хочу, чтобы все изменения из ProjectA накапливались в ProjectB, в то время как я ожидаю запроса проекта ProjectA, который должен быть одобрен инструкторами.

+0

Вы можете сделать это визуально с помощью Source Tree, перевести дочерние элементы [root commit] в интерактивном режиме ... это даст вам список коммитов на вашем ветке ProjectB, и вы можете удалить любые фиксации на ветке – EdmundYeung99

ответ

0

Вы хотите переписать историю так, чтобы родительский элемент первого коммита B был корневым.

Вот что git rebase, и конкретно git rebase -i, для.

Отверните ветку B, запустите git rebase -i <ID of root commit>, а затем удалите все объекты, которые хотите удалить.

+0

Я попробовал это сейчас , и удалил другие коммиты, которые не принадлежали к той работе, которую я выполнял в проекте B, но после переучета филиал ProjectB по-прежнему был заполнен Закоммутатором проекта А. – phrz

+0

Этого не должно быть. Каков был результат восстановления? Что такое 'git log' до и после? – SLaks

+0

Итак, что происходит, это посторонние коммиты, появляющиеся в режиме интерактивной переадресации, все из проекта до A, когда я удаляю их весь проект. Все еще находится в ветке ProjectB. Базовая операция выполняется успешно без ошибок, а файл журнала/восстановления выглядит следующим образом: http://phrz.io/dR9N (журнал: до), http://phrz.io/dQh7 (журнал: после), http: //phrz.io/dQs3 (список переименований: раньше), http://phrz.io/dQbA (список переадресации: после) – phrz

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