Слить ветку master и main
Создал проект и главная была ветка master, сделал коммиты, запушил. Получается в ветке main лежит только .gitignore, а на компе видна только ветка master. Как их слить в main?
Ответы (3 шт):
1 вариант:
1. git pull repo_title main (скопировать содержимое удаленного репозитория в локальный)
2. git checkout master (переместиться в ветку master)
3. git merge main (скопировать содержимое с ветки main в ветку master)
4. git branch -d main (удалить ветку main)
5. git push repo_title master (обновить ветку master удаленного репозитория)
6. git push --delete repo_title main (удалить ветку main на удаленном репозитории)
2 вариант: скопировать файл .gitignore в локальный репозиторий. Удалить ветку main (п. 6 либо удалить в интерфейсе Github).
если локальное хранилище у вас уже существовало, то ни к чему было создавать коммит на сервере github.com (об этом там явно написано: пропустите этот шаг, если локальное хранилище у вас уже есть). но будем исходить из предположения, что сгенерированное сервером содержимое файла .gitignore вам остро необходимо. это допущение номер раз.
следующая проблема, с которой вы столкнулись, проистекает из сумасбродства (моё оценочное суждение) владельцев сервера github.com — в то время как программа git создаёт по умолчанию ветку с именем master, не так давно они решили у себя на сервере создавать ветку с именем main. будем исходить из предположения, что вы согласны пойти у них на поводу и использовать имя main как локально, так и в копии вашего хранилища на их сервере. это допущение номер два.
итак, что у вас есть?
- в локальном хранилище ветка
masterс одним или несколькими коммитами. - в хранилище на github.com ветка
mainс одним коммитом, в котором создан автоматически сгенерированный файл.gitignore.
что хотим получить?
- локальное хранилище с веткой
main, содержащее как коммиты из локальной веткиmaster, так и коммит, созданный в веткеmainна сервере github.com - идентичную картину и в хранилище на сервере github.com
план действий:
если ещё не подключили к своему локальному хранилищу то хранилище, что создали на сервере, то подключите и заберите оттуда информацию:
$ git remote add origin [email protected]:имя-вашей-учётной-записи/имя-хранилища $ git fetch --allесли вдруг текущей у вас объявлена не ветка
master, то сделайте её таковой:$ git checkout masterдобавьте в эту ветку коммит, созданный сервером в ветке
main(содержащий создание автосгенерированного файла.gitignore):$ git cherry-pick origin/mainсоздайте локальную ветку
main, которая будет указывать (ветка в git — это ведь просто плавающий указатель, верно?) на тот же коммит, что иmaster:$ git branch -f main masterтеперь сделайте ветку
mainтекущей:$ git checkout mainудалите ветку
master:$ git branch -D masterи отправьте ветку
mainна сервер, делая одновременно и перезапись (опция-f) привязку локальной ветки к ветке на сервере (опция-u):$ git push -f -u origin main
на этом всё. доп. чтение:
$ man git-remote$ man git-fetch$ man git-checkout$ man git-cherry-pick$ man git-branch$ man git-push
но в следующий раз постарайтесь не создавать самому себе проблемы на ровном месте: либо создавайте пустое хранилище на сервере и отправляйте в него содержимое своего локального хранилища, либо, раз создаёте непустое хранилище на сервере, сделайте его локальный клон, а в него уже добавляйте ваши коммиты.
Столкнулся с такой же ситуацией, начал изучать Git на PyCharm. Я решил её довольно просто, я удалил ветку 'master' из репозитория на github, затем переименовал main в master, после этого повторно запушил проект на github. При запросе подтвердил rebase.