Сообщение 'src refspec master не соответствует никому' при нажатии на коммиты в Git


2693

Я клонирую свой репозиторий с помощью:

git clone ssh://xxxxx/xx.git 

Но после того, как я изменить некоторые файлы и addи commitих, я хочу , чтобы подтолкнуть их к серверу:

git add xxx.php
git commit -m "TEST"
git push origin master

Но ошибка, которую я получаю обратно:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'

26
@ Марко Это не дубликат. Это очень специфическая проблема при перемещении локальной ветви в удаленную. Это о инициализации репо и его продвижении. Они выдают ту же ошибку, но ПРИЧИНЫ, которые они вызывают, и исправления совершенно разные. Кроме того, sinoohe, вы должны принять ответ. Вероятно, первый, поскольку он отвечает на вопрос и помог более 350 человек.
tandrewnichols

Вы настроили свои команды git config для глобальной установки и настройки git на своем компьютере?
Игорь Ганапольский

1
Надеюсь, что этот пост будет кому-нибудь полезен - samranga.blogspot.com/2015/07/… Ошибка в этом вопросе может появиться, даже если попытаться создать репозиторий git BitBucket из уже существующего локального проекта
Samitha Chathuranga

Я получил эту ошибку, пытаясь выдвинуть неправильное имя ветви. Решено использовать, git statusчтобы получить правильный.
Том Ховард,

5
Еще одна простая задача, затрудненная Git. Разработчики Git должны использовать переполнение стека в качестве обратной связи в своем цикле SDLC. Более 850 000 человек должны указать, что с рабочим процессом Git что-то не так. Им нужно нанять эксперта по UX, потому что они явно не могут сделать это самостоятельно.
jww

Ответы:


4144

Может быть, вам просто нужно совершить. Я столкнулся с этим, когда я сделал:

mkdir repo && cd repo
git remote add origin /path/to/origin.git
git add .

К сожалению! Никогда не совершал!

git push -u origin master
error: src refspec master does not match any.

Все, что мне нужно было сделать, это:

git commit -m "initial commit"
git push origin master

Успех!


130
Не просто следуйте этому шагу вслепую, посмотрите на то, что упомянул @Vi, а затем измените команду push, чтобы исправить ref.
Кумар

49
Наиболее вероятной причиной этой ошибки является то, что все файлы не отслежены и не были добавлены. git add --allв случае, если вы хотите добавить все файлы или вы можете выборочно добавлять файлы. Тогда git commit -m "Initial comment", git push origin master. Это обязательно сработает.
Бхану Пратап Сингх

6
Исправляет другую проблему, которая хороша, но на самом деле не является ответом на этот актуальный вопрос.
Майкл Даррант

7
git commit -m 'initial commit'должен быть в двойных кавычках. ' git commit -m "initial commit", По крайней мере , на окнах.
dance2die

5
Другая возможная причина: у вас на самом деле нет ветки с именем master
CarlosAS

844
  1. Попробуй git show-refпосмотреть какие рефери у тебя есть. Есть ли refs/heads/master?

  2. Вы можете попробовать git push origin HEAD:masterкак более локально-независимое решение. Это явно говорит о том, что вы хотите передать локальный ref HEADв удаленный ref master(см. Документацию git-push refspec ).


6
моя главная ветка не была в числе коммитов! поэтому я создал ветку, которая была в конце всех веток, и я
поместил

10
git checkout -b testbranch; git push origin testbranch: master
sinoohe

101
git show-refпоказал мою ветку; git push origin HEAD:<branch>работал для меня.
Глен Солсберри

5
Ты только что спас меня, Ви. Благодарим Вас за git push origin HEAD:master. Но почему что-то вроде git push --force origin masterне работает?
Шкшнейдер

4
@ gms8994 - ты прав. если кто-то создает ветку первым делом, а не вставляет в мастер, появляется та же unfriendlyошибка. используйте git push origin <branch>вместо masterв случае, если вы git checkout -b <branch>git remote add origin <url>
пытаетесь

225

У меня также была похожая ошибка после удаления всех файлов на моем локальном компьютере, и я должен очистить все файлы в хранилище.

Мое сообщение об ошибке было что-то вроде этого:

error: src refspec master does not match any.
error: failed to push some refs to 'git@github ... .git'

И это было решено путем выполнения следующих команд:

touch README
git add README

git add (all other files)
git commit -m 'reinitialized files'
git push origin master --force  # <- caution, --force can delete others work.

10
Другие ответы не решили проблему, с которой я столкнулся (например, я уже совершил ошибку и все еще имел эту ошибку), но git push origin BRANCH --forceсработал. Спасибо!
Lemmings19

Смотрите этот предыдущий ответ . Я подозреваю, что вам нужно было добавить файл, потому что git не будет отслеживать пустые каталоги.

3
Толчок - сила может также полностью сдуть тяжелую работу коллег. Добавлено предупреждение по нему.
Майкл Даррант

3
Это решило мою проблему. Я думаю, Git Add сделал это. Несмотря на то, что при первом нажатии git ничего не распознает, возможно, поэтому у меня возникла проблема. Команда git add решила мою проблему. также после этого я смог толкать без --force. Спасибо Aryo
Anandaraja_Srinivasan

203
  1. Мои изменения уже зафиксированы
  2. Сила толчка все еще дала мне ту же ошибку.

Поэтому я попробовал решение Ви :

git push origin HEAD:<remoteBranch> 

Это сработало для меня.


19
Я наконец узнал, что это потому, что я неправильно написал название ветви. Я успешно переместил ветвь A в начало координат с помощью ветки с именем B git push origin HEAD:B, но у меня все равно возникала одна и та же ошибка каждый раз, когда я проталкиваю git push originветку A
Yi H.

1
@ YiHuang, тьфу, спасибо, я уже проверил название своей ветки, а потом еще раз проверил его из-за твоего комментария - возникла та же проблема, неправильно написала.
lakesare

1
@ YiH.i был уверен, что имя моей ветки правильное, но я только что перепроверил его после прочтения вашего комментария, и у моего плохого - та же проблема.
Нулевой указатель

125
git push -u origin master
error: src refspec master does not match any.

Для этого вам нужно ввести сообщение о коммите следующим образом, а затем нажать на код:

git commit -m "initial commit"

git push origin master

Успешно подтолкнул к мастеру.


Я проверил, что это работает. Пожалуйста, игнорируйте опцию -u, а затем попробуйте
VIKAS KOHLI

Проблема здесь, кажется, полностью отличается от ОП ... но, похоже, многие, включая меня, имели эту проблему.
ZX9

110

Мне нужно было убедиться, что открытый ключ правильно настроен на сервере (добавлен в ~ / .ssh / authorized_keys) и в GitHub / Bitbucket (добавлен в мои ключи SSH на GitHub или Bitbucket) - они должны совпадать.

Затем:

git add --all :/

git commit -am 'message'

git push -u origin master

Это сработало для меня в конце концов.


88

Я обнаружил, что это произошло в совершенно новом хранилище после того, как я добавил Git только каталог.

Как только я добавил файл (например, README), Git push работал отлично.


6
Это, вероятно, работает, потому что git на самом деле не отслеживает каталоги, а только файлы. Так что если каталог пуст, git на самом деле его не добавит.

1
ОП добавил файл (xx.php), так что в этом случае это не было проблемой, хотя в других случаях это может быть проблемой, и добавление файла решает эту проблему.
Майкл Даррант

1
Такое простое решение неприятной проблемы. Я тестировал создание и клонирование репозиториев и создавал пустые каталоги, а не файлы.
Джеймс Вежба

1
8 лет спустя это избавило меня от головной боли!
rvictordelta

В моем случае 1 -> git init 2 ---> git add origin .... и т. Д. 3 ---> git git push -u origin master ===> Тогда я получил вышеуказанную ошибку. ===> Затем я выполнил следующие 2 команды, они исчезают. ---> git add * ---> git commit -m "Some message" ---> git git push -u origin master ===> В моем случае сработало нормально.
Рао

67

Отсутствует или пропускает git add .или git commitможет вызвать эту ошибку:

git push -u origin master
Username for 'https://github.com': yourusername
Password for 'https://yourusername@github.com': 
error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/yourusername/foobar.git'

Чтобы исправить это, переинициализируйте и следуйте правильной последовательности:

git init
git add .
git commit -m 'message'
git *create remote
git push -u origin master

это верно, бизнес-цель более конкретна git remote add __REMOTE_NAME__ __URL_OR_SSH__, а над удаленным именем - «происхождение»
aug2uag

1
Они добавили и посвятили в своем вопросе, так что это не проблема, хотя это помогает другим людям.
Майкл Даррант

Этот ответ сработал, однако, из-за -uопции, которая использовалась здесь.
Майкл Даррант

63

Чтобы исправить это, повторно инициализируйте и следуйте правильной последовательности кода:

git init
git add .
git commit -m 'message'
git push -u origin master

55

Сначала убедитесь, что вы добавили, а затем подтвердите / нажмите:

Подобно:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

44

Я столкнулся с той же проблемой, и я использовал --allow-empty:

$ git commit -m "initial commit" --allow-empty
...
$ git push
...

дополнение

Одной из основных причин этой проблемы является то, что некоторые Git-серверы, такие как BitBucket, не masterинициализируют свою ветвь при клонировании свежего репозитория.


43

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

$ git branch
* version-x  # you are in this branch
  version-y

$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'origin_address'

3
ЛОЛ. Я пытался подтолкнуть к мастеру происхождения, но эта ветвь не существовала. Это называлось происхождение стабильным.
Пеннер

1
-u, Возможно, помогли здесь.
Майкл Даррант

1
В приведенном выше случае проблема, конечно, в том, что нет локальной ветки master, поэтому вы не можете ее выдвинуть. Вы либо хотите нажать существующую ветвь - либо создать основную ветвь, а затем нажать ее, как git checkout -b master; git push -u origin master;
показано ниже

4
Я только получил это, когда я неправильно написал название ветви.
Себастьян Эрлерид,

2
Мой местный филиал был написан как " h eduler", и я делал git push origin scheduler. ХА! Одна буква убьет вас в программировании. лол
протоевангелион

36

Для меня следующие работали, чтобы переместить неотслеживаемые файлы:

git add --all

Далее я выполнил аналогичные шаги

 git commit -m "First commit"

Затем,

git remote add origin git@github.....

Последний по порядку, но не по значимости:

git push -u origin master

Когда вы это сделаете, появится окно безопасности Windows с запросом вашего имени пользователя и пароля.


1
Вы имели в виду «git add --all» с двумя штрихами
Абдалла Абдилла

29

В моем случае я забыл включить .gitignoreфайл. Вот все необходимые шаги:

  1. Создайте пустой репозиторий Git на удаленном компьютере,
  2. На локальном создайте файл .gitignore для вашего проекта. GitHub дает вам список примеров здесь
  3. Запустите терминал, и в вашем проекте выполните следующие команды:

    git remote add origin YOUR/ORIGIN.git
    
    git add .
    
    git commit -m "initial commit or whatever message for first commit"
    
    git push -u origin master
    

Как эта ошибка связана с .gitignore ?! Если это связано (в чем я очень сомневаюсь), вы должны объяснить это в своем ответе. Спасибо
Педрам Башири

26

Просто добавьте начальный коммит. Следуй этим шагам:

  • git add .

  • git commit -m "initial commit"

  • git push origin master

Это сработало для меня.


24

Моя проблема заключалась в том, что ветка 'master' еще не была создана локально.

Быстрый

git checkout -b "master"

создал главную ветку, после чего быстро

git push -u origin master

перенес работу в репозиторий Git.


22

Вы, вероятно, забыли команду «git add». после команды "git init".


Плюс git commitконечно ...
Билл

20

Я также следовал указаниям GitHub, как указано ниже, но я все еще сталкивался с той же ошибкой, о которой упоминал OP:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

Для меня, и я надеюсь, что это поможет некоторым, я загружал большой файл (1.58 GB on disk)на моем MacOS. Копируя, вставляя предложенную строку кодов выше, я не ждал, пока мой процессор завершит add .процесс. Поэтому, когда я набрал git commit -m "message"его, он в основном не ссылался ни на какие файлы и не выполнил все, что нужно для успешной фиксации моего кода в GitHub.

Доказательством этого является то, что когда я печатаю, я git statusобычно получаю зеленые шрифты для добавленных файлов. Но все было красным. Как будто это не было добавлено вообще.

Поэтому я переделал шаги. Я набрал git add .и дождался окончания добавления файлов. Затем я прошел через следующие шаги.


19

Это просто означает, что вы забыли сделать первоначальный коммит, попробуйте

git add .
git commit -m 'initial commit'
git push origin master

пожалуйста, напишите git commit -m "initial commit"
Yash Agrawal

19
  1. Первый, git add .
  2. Во-вторых, git commit -m "message"
  3. В третьих, git push origin branch

Пожалуйста, проверьте на наличие орфографических ошибок, потому что это также может привести к этой ошибке.


18

У меня была такая же проблема, когда я пропустил:

git add .

(У вас должен быть хотя бы один файл, иначе вы снова получите ошибку.)


18

Это происходит, если вы забыли зафиксировать перед первым нажатием. Просто беги:

git commit -m "first commit"

17

Чтобы проверить текущее состояние, git status.

И выполните следующие шаги:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

16

Это происходит, когда вы добавили свой файл, забыли зафиксировать и нажать. Так что зафиксируйте файлы и затем нажмите.


14

У меня такая же проблема. Я сделал это с помощью следующих шагов:

1. git commit -m 'message'
2. git config --global user.email "your mail"
3. git config --global user.name "name"
4. git commit -m 'message'
5. git push -u origin master

14

Если вы получаете эту ошибку при работе в режиме HEAD, вы можете сделать это:

git push origin HEAD:remote-branch-name

Смотрите также: Создание Git-толчка из оторванной головы.

Если вы находитесь в другой локальной ветке, чем в удаленной, вы можете сделать это:

git push origin local-branch-name:remote-branch-name

13

В сценарии, где вы извлекаете код из внешнего репозитория (GitHub) и хотите импортировать его в персональную / внутреннюю систему, эта команда действительно светит:

git push --all origin

Это подталкивает все локальные ветви к удаленному, не проверяя ссылки и не настаивая на коммитах.


12

Это также произойдет, если у вас есть опечатка в имени ветви, которую вы пытаетесь нажать.


2
Я подозреваю, что многие из нас, кто пришел сюда с помощью веб-поиска, на самом деле неправильно набрали название!
мудрец

12
git add .

это все, что тебе нужно. Этот код отслеживает все неотслеживаемые файлы в вашем каталоге.


10

В случае, если вы столкнулись с этой проблемой даже после того, как сделали git initи нажали свой первоначальный коммит. Затем вы можете попробовать следующее,

git checkout -b "new branch name"
git push origin "new branch name"

Ваш код будет выдвинут как новая ветка.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.