Ваше удаленное репо на Github имеет два коммита, давайте назовем их A и B. Ваше локальное репо имеет совершенно разные коммиты, давайте назовем их C и D. Это выглядит так.
A - B [origin/master]
C - D [master]
Вы можете использовать git log --decorate --all --graph
для просмотра аналогичного полного представления вашего репозитория.
master - это основная ветвь вашего локального репозитория, origin / master - то, где ваш локальный репо последний раз видел master на Github.
Поскольку они не имеют ничего общего, Git не объединит их. То, как вы справитесь с этой ситуацией, зависит от того, как вы попали в нее, что находится в C и D и что вы хотите сохранить.
Не начинайте запускать команды, пока не решите, что Вы хотите сохранить.
Один из способов получить это вместо использования git clone <repo-url>
, который вы использовали git init
, а затем git remote add <repo-url>
. Это приводит к пустому локальному хранилищу. Вам нужно будет git fetch
перед началом работы извлечь содержимое удаленного репозитория.
См. этот ответ , чтобы узнать больше об этой ситуации.
Если Вы хотите сохранить все свои коммиты, переназначить свои локальные изменения поверх удаленных. Это сделает так, как если бы вы все время выполняли локальную работу поверх удаленного кода.
$ git rebase origin/master
A - B [origin/master]
\
C - D [master]
$ git push
A - B - C - D [master]
[origin/master]
Могут быть конфликты, если C и D дублируют работу в A и B, например разные файлы README.md. Вам придется их разрешить.
Если вы хотите отбросить удаленные изменения, git push --force
замените всю основную ветку своей собственной.
$ git push --force
C - D [origin/master]
[master]
Если вы хотите удалить свои локальные изменения, используйте git reset
, чтобы переместить локальную главную ветвь в тот же коммит, что и в удаленном.
$ git reset --hard origin/master
A - B [origin/master]
[master]