2016-12-08 5 views
1

У меня есть три ветви, main branch, development branch и ветка new_feature.Переключение типа ответвления после совершения

Проблема заключается в том, что я случайно установил свою первую фиксацию (начальную фиксацию) на development branch.

Скриншот моей проблемы: enter image description here

Полный обзор моих филиалов: enter image description here Вопрос: Как я могу изменить его на main branch?

+1

Этот ответ лучше, чем я мог бы дать: http: // stackoverflow.com/questions/1628563/move-the-most-recent-commits-to-a-new-branch-with-git – tehp

ответ

0

Как вы не объединили удаленные ветви (происхождение/развитие и происхождение/новая_фауна) в местное репо. Таким образом, существует две ситуации

Не нужны удаленные изменения. Выполните следующие шаги:

  1. Создайте новую «начальную фиксацию». git checkout master, git checkout --orphan master1, а затем git commit
  2. Восстановительная ветка развития на нем. git checkout development и git rebase master1 (если есть файл конфликта, вы используете git add filename и git rebase --continue).
  3. Удалить ветвь master и new_feature. git branch -D master и git branch -D new_feature
  4. Переименовать филиал. git branch -m master1 master, git checkout master и git branch new_feature
  5. Принудительное нажатие на пульте дистанционного управления. git push -f --all

Нужны удаленные изменения. Выполните следующие шаги:

  1. Объединить удаленные изменения локально. git checkout development, git merge origin/development, git checkout new_feature, git merge origin/new_feature
  2. Создайте новое «намеренное совершение». git checkout master, git checkout --orphan master1, а затем git commit
  3. Восстановительная ветка развития на нем. git checkout developmen и git rebase master1
  4. Rebase new_feature branch на нем. git checkout new_feature и git rebase master1
  5. Переименовать главную ветвь. git branch -D master и git branch -m master1 master
  6. Принудительное нажатие на пульте дистанционного управления. git push -f --all
+0

Спасибо за это! но могу ли я спросить, какая разница между нормальной «веткой» и «удаленной ветвью»? Почему, когда я пытаюсь создать новую ветку, создается также «удаленный»? –

+0

Да, из-за причины. Локальный филиал - это просто «работа для удаленного», удаленная ветка - это то место, где вы контролируете версию. И локальная ветка может отслеживать удаленную ветку (вы можете проверить отношения соединения на 'git branch -a'). когда вы создаете новую локальную ветвь и хотите направить ее на удаленный, она по умолчанию создаст ту же ветку в удаленном режиме. «Git push» в равной степени относится к «git push origin newbranch: newbranch». Предположим, хотите ли вы направить локальную новую ветку на удаленную ведущую ветку, вы можете использовать 'git push origin newbranch: master' –

+0

Спасибо! Другое дело, вы упомянули о «удаленных изменениях», что означает «удаленные изменения»? и когда вы хотите иметь «удаленные изменения»? похоже, что это связано с объединением удаленных филиалов и локальных филиалов вместе. –

0

Вы можете связаться со своей основной веткой или использовать команду cherry-pick от вашей главной ветки для получения первоначальной фиксации.

0
git push -u origin development//(push it up to development) 
git checkout main //checkout local main branch 
git pull origin development //Pull latest from remote development branch into main 
git add -A 
git commit -m "get latest from development" 
git push -u origin //push up to main 
0

Вы можете переименовать свою ветку разработки.

$ git checkout development     # checkout development 
$ git checkout -b development-backup  # backup development branch 
$ git branch -D master      # delete your current local master 
$ git branch -m development master   # rename development -> master 
$ git checkout master      # checkout master 
$ git push -f origin master    # force push, update remote master 
+0

Я не видел никаких причин: 1) переименовать ветвь 'dev' в' master', он все еще имеет удаленную ветвь 'dev' для отслеживания, и очень важно, что у его' master' есть разные хэши с 'dev' 2) ** force ** update на удаленный мастер, ничего не перепутано с' refs/remotes/origin/master' ему просто нужно действие 'reset' или' revert', а затем синхронизироваться с удаленной ветвью. мой выбор был бы «cherry-pick» или «rebase master» -> 'checkout master' ->' merge dev'. – Xlee

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