Страницы

Поиск по вопросам

понедельник, 27 мая 2019 г.

Git не делает push на другую ветку на сервере

$ git status On branch master Your branch is ahead of 'origin/master' by 3 commits.
...
$ git push origin Tim_Musharapov error: src refspec Tim_Musharapov does not match any. error: failed to push some refs to '...'
Почему не удается сделать push?


Ответ

error: src refspec Tim_Musharapov does not match any
Это означает, что в репозитории origin просто нет ветки с именем Tim_Musharapov. Её нужно создать. Для создания веток применяется такой синтаксис:
git push origin что:куда
Здесь что - это локальная ветка, которую вы хотите запушить, а куда - имя новой ветки на origin, в которую вы хотите запушить ветку что. А origin это название удалённого репозитория (remote), оно может быть другим, но по умолчанию используется такое.
Поэтому предложенный в соседнем ответе вариант git push origin master:Tim_Musharapov означает "Взять локальную ветку master и запушить во вновь создаваемую ветку Tim_Musharapov". Это работает, но появится несоответствие в названиях локальных и удалённых веток. А ещё ветка master у вас теперь занята под собственную работу и стало неудобно получать обновления ветки master репозитория origin
Your branch is ahead of 'origin/master' by 3 commits
В вашей ветке master есть три ваших коммита, так что git pull в эту ветку уже не получится.
Есть общепринятая практика: называть локальные и удалённые ветки одинаково. Это не обязательно (т.е. Git позволяет делать и по-другому), но удобно и практично. Соответственно, если вам нельзя изменять удалённую ветку master то не вносите изменений по ходу работы в локальный master.
Поэтому предлагаю такое решение:
Для начала нам нужна ветка, в которую будем коммитить результаты своей работы. Она может называться, например, Tim_Musharapov, но обычно ветку называют по решаемой задаче, а не по имени разработчика.
Если такой ветки ещё нет, её нужно создать так, чтобы она дублировала master (смотрела на тот же коммит).
git checkout -b Tim_Musharapov master
Если ветка уже есть, обновим её до текущего master:
git checkout Tim_Musharapov git merge --ff-only master # если конфликт, значит там есть какие-то изменения, которых нет в master # нужно смотреть и разбираться.
пушим её в origin, ключ -u сохраняет соответствие локальной и удалённой ветки
git push -u origin Tim_Musharapov:Tim_Musharapov
# в следующий раз из этой ветки можно будет пушить проще: git push
А ветку master вернём к состоянию как на remote
git checkout master git reset --hard origin/master
# В локальную ветку master мы будем получать обновления с origin git checkout master git pull
Ещё немного про синтаксис что:куда
git checkout somebranch # Оба варианта создают одноимённую ветку на origin git push origin -u somebranch git push origin -u somebranch:
# Запушить "ничего" в ветку - значит удалить её git push origin :otherbranch

Комментариев нет:

Отправить комментарий