как исправить не-ускоренную перемотку в git без pu sh --force - PullRequest
0 голосов
/ 03 мая 2020

У меня проблема с тем, что я пытался добавить коммит к своему репо на github, в котором были коммиты, но я получаю это см. Изображение git bash Я вижу намеки на ошибку, и я вытягиваю раньше я попытался сделать еще раз sh, но заметил, что получилось, я вижу много ответов, но ни один не решает мою проблему, также мне не нужно использовать, поскольку мне не нужно удалять коммиты в репо


- используемые мной команды
1- $ git -u push origin master
2- $ git pull origin master


Уведомление : Я был вытащен, прежде чем сделать снимок экрана, и он загружается нормально.
ссылка моего репо на github ссылка на github

спасибо.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Ваше удаленное репо на 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]
1 голос
/ 03 мая 2020

Я предполагаю, что вы клонировали проект из нового каталога или подобного? Или начать новый проект без предварительного извлечения.

Вы можете попробовать потянуть с этим флагом --allow-unrelated-histories, чтобы объединить две несвязанные git истории дерева. Хотя это не очень хорошая практика и может привести к проблемам в будущем.

git pull origin master --allow-unrelated-histories
...