2014-01-28 3 views
1

У меня есть код в главной ветви моего проекта. Я хочу, чтобы код находился в отдельной ветке, и ни один из них в главном. Я могу создать новую ветку от мастера. Но после создания ветки можно удалить весь код из мастера таким образом, чтобы, если я позже переустанавливаю или объединяю свою новую ветвь в мастер, это не вызовет никаких проблем?Сдвиг всего кода от мастера к новой ветке и удаление кода от мастера

Спасибо

+0

Вы совершили ошибку и нажали на пульте дистанционного управления? –

+0

Да, я нажал на удаленный, я хочу создать новую ветку на самом пульте и переместить весь код из мастера в новую ветку –

ответ

3

Это немного сложнее, и вы не можете сделать это правильно, если другие уже есть копии фиксаций. То есть если вы переместили основную ветку в удаленный репозиторий, который используют другие люди или люди вытаскивают из вашего репозитория, нет чистого способа избавиться от этого.

Вы должны переписать историю ведущей ветки. Здесь есть два случая. Из вашего вопроса, я предполагаю, что в master есть фиксация, которая была создана до любой из кодов, которые вы хотите удалить из мастера. Пусть идентификатор этого фиксации будет rootcommit. Пропустите шаги 1 и 2, если у вас уже есть новая ветка для вашего кода, разветвленная мастер.

  1. git checkout master: убедитесь, что вы находитесь в мастерской.
  2. git checkout -b my-fancy-new-branch: создайте свою новую ветку.
  3. git checkout master: переключиться обратно на главный
  4. git reset --hard rootcommit: переустановите мастер в состояние до того, как вы его совершите.
  5. по желанию, и если у вас есть пульт дистанционного управления Вы тянете от: git pull --ff (. Если это не удается, потому что тянуть не быстро вперед, вы должны пересмотреть rootcommit Он содержит некоторые ваши работы)

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

git checkout my-fancy-new-branch 
git rebase master 

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

git checkout master 
git push --force 

Как сказано, силовые толчки действительно злые, и вам, вероятно, следует избегать этого. Если вы можете, просто оставьте коммиты в истории и сделайте это в следующий раз.

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