«Пушить локально» это масло масляное. Мы всегда пушим локально, но во внешний (remote) репозиторий. Понятия внешний и локальный тут относительны, так как все репозитории в Git равноправны и могут обмениваться коммитами в любых направлениях. Причём репозитории запросто могут лежать на локальном компьютере. Репозиторий откуда мы выполняем команды push/fetch/pull называется «локальным», а тот откуда/куда передаём данные называется «внешним». Я не люблю перевод слова remote как удалённый, потому что потом возникают дикие конструкции типа «удалить удалённый», которые ломают мозг.
Выибивает ошибку что non-bare
репозиторий.
Вы невнимательно читаете текст ошибки. Там ключевое слово
current branch in a non-bare repository, т. е. нельзя пушить в текущую ветку, которая в данный момент распакована в рабочем каталоге. В голом репозитории (bare) нет рабочего каталога, поэтому такой проблемы не возникает.
Как правильно синхронизировать ветки репозиториев? Способов много
1. Перед push зайти во «внешний» репозиторий и переключиться в другую ветку.
2. Вместо push из «локального» репозитория можно делать pull, находясь во «внешнем».
3. Можно заставить Git игнорировать проблему, но рабочий каталог «внешнего» репозитория просто не будет актуализироваться сам, нужно будет потом там вручную делать
git reset --hard
4. Сделать целевой репозиторий голым, но тогда вы не сможете в него коммитить напрямую.