Страницы

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

воскресенье, 8 марта 2020 г.

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

#git #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?
    


Ответы

Ответ 1



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

Ответ 2



Потому что идет привязка к основной ветке. Делайте так: git push origin master:Tim_Musharapov

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

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