Слить ветку 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).

→ Ссылка
Автор решения: aleksandr barakin

если локальное хранилище у вас уже существовало, то ни к чему было создавать коммит на сервере github.com (об этом там явно написано: пропустите этот шаг, если локальное хранилище у вас уже есть). но будем исходить из предположения, что сгенерированное сервером содержимое файла .gitignore вам остро необходимо. это допущение номер раз.

следующая проблема, с которой вы столкнулись, проистекает из сумасбродства (моё оценочное суждение) владельцев сервера github.com — в то время как программа git создаёт по умолчанию ветку с именем master, не так давно они решили у себя на сервере создавать ветку с именем main. будем исходить из предположения, что вы согласны пойти у них на поводу и использовать имя main как локально, так и в копии вашего хранилища на их сервере. это допущение номер два.


итак, что у вас есть?

  1. в локальном хранилище ветка master с одним или несколькими коммитами.
  2. в хранилище на github.com ветка main с одним коммитом, в котором создан автоматически сгенерированный файл .gitignore.

что хотим получить?

  1. локальное хранилище с веткой main, содержащее как коммиты из локальной ветки master, так и коммит, созданный в ветке main на сервере github.com
  2. идентичную картину и в хранилище на сервере github.com

план действий:

  1. если ещё не подключили к своему локальному хранилищу то хранилище, что создали на сервере, то подключите и заберите оттуда информацию:

    $ git remote add origin [email protected]:имя-вашей-учётной-записи/имя-хранилища
    $ git fetch --all
    
  2. если вдруг текущей у вас объявлена не ветка master, то сделайте её таковой:

    $ git checkout master
    
  3. добавьте в эту ветку коммит, созданный сервером в ветке main (содержащий создание автосгенерированного файла .gitignore):

    $ git cherry-pick origin/main
    
  4. создайте локальную ветку main, которая будет указывать (ветка в git — это ведь просто плавающий указатель, верно?) на тот же коммит, что и master:

    $ git branch -f main master
    
  5. теперь сделайте ветку main текущей:

    $ git checkout main
    
  6. удалите ветку master:

    $ git branch -D master
    
  7. и отправьте ветку 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

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

→ Ссылка
Автор решения: Ilya Filisteev

Столкнулся с такой же ситуацией, начал изучать Git на PyCharm. Я решил её довольно просто, я удалил ветку 'master' из репозитория на github, затем переименовал main в master, после этого повторно запушил проект на github. При запросе подтвердил rebase.

→ Ссылка