Github «Обновления были отклонены, потому что на пульте есть работа, которой у вас нет»


177

Я создал новое хранилище, клонировал его, добавил файлы в каталог, добавил их add -A, зафиксировал изменения, и когда я пытаюсь использовать push, git push <repo name> masterя получаю «Обновления были отклонены, потому что удаленный содержит работу, которой у вас нет».

Это не имеет смысла, так как это новый репозиторий, содержащий только файл readme.

Ответы:


309

Это происходит, если вы инициализировали новый репозиторий github с помощью READMEи / или LICENSEфайла

git remote add origin [//your github url]

//pull those changes

git pull origin master 

// or optionally, 'git pull origin master --allow-unrelated-histories' if you have initialized repo in github and also committed locally

//now, push your work to your new repo

git push origin master

Теперь вы сможете перенести свой репозиторий в github. По сути, вы должны объединить эти новые инициализированные файлы с вашей работой. git pullвыбирает и сливается для вас. Вы также можете получить и объединить, если это вас устраивает.


7
Я создал видео на YouTube с более подробным объяснением и двумя предлагаемыми способами избежать этой проблемы.
Кевин Маркхэм

16
Для команды слияния мне нужно использоватьgit pull origin master --allow-unrelated-histories
Лучано Маркето

Я
Sergi

4
@Sergi trygit pull origin master --allow-unrelated-histories
palerdot

101

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

git pull

Разрешение конфликтов слияния:

git push

Если вы подтвердите, что с вашим новым кодом все в порядке, вы можете использовать:

git push -f origin master

Где -fрасшифровывается как «Принудительный коммит».


13
«мерзавец толчок -f мастер происхождения» -это помогает
Саурабх

4
git push -f перезаписывает удаленную историю вашей локальной историей, будьте осторожны при ее использовании. Особенно в публичных репозиториях.
Андре

updates-were-rejectedтакже происходит, если вы внесли изменения в github repo на удаленном компьютере, например: произвели некоторые изменения в файле readme с помощью github gui. А затем попытался перенести вашу новую работу на github, он покажет это сообщение о том, что изменения были сделаны в удаленном режиме, но его нет локально.
Deke

13

Если это ваш первый толчок

просто измените

git push <repo name> master

изменить это так!

git push -f <repo name> master

1
Это отбрасывает файлы, которые изначально были созданы в источнике. Скорее используйте git pullbefore для получения удаленных файлов и затем объедините ваш коммит. Точно так же, как принятый ответ заявляет
JayJay

@jayjaybricksoft Спасибо за ваш комментарий. Это первое нажатие, поэтому замена исходных файлов - это нормально.
Махар


2

Предоставленные ответы не работают для меня.

У меня был пустой репозиторий на GitHub только с файлом LICENSE и одним коммитом локально. Что сработало было:

$ git fetch
$ git merge --allow-unrelated-histories
Merge made by the 'recursive' strategy.
 LICENSE | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE

Также, прежде чем mergeвы захотите:

$ git branch --set-upstream-to origin/master
Branch 'master' set up to track remote branch 'master' from 'origin'.

0

Я следовал за этими шагами:

Потяните мастера:

git pull origin master

Это синхронизирует ваше локальное репо с репозиторием Github. Добавьте ваш новый файл и затем:

git add .

Зафиксируйте изменения:

git commit -m "adding new file  Xyz"

Наконец, нажмите оригинал мастера:

git push origin master

Обновите репозиторий Github, вы увидите новые добавленные файлы.


0

Если вы используете Visual S2019, создайте новую локальную ветвь, как показано ниже, и затем внесите изменения в репозиторий. VS2019 местное отделение

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