Сообщение '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.