Каков идеальный способ поместить мой код в sh новый удаленный репозиторий, если в нем есть файл, который не является локальным? - PullRequest
0 голосов
/ 15 марта 2020

Я иногда сталкивался с этой ситуацией:

  1. Я некоторое время кодировал без какой-либо системы контроля версий
  2. Я делаю git init локально и запускаю версию control
  3. Я создаю новый репозиторий на GitHub.com и добавляю LICENSE или readme.md
  4. LICENSE / readme отсутствует в моем локальном репозитории
  5. Git не разрешит мне сделать pu sh в удаленном репозитории, потому что в нем есть файлы, которые не хранятся локально (readme или LICENSE)

Я читал несколько способов исправить это. Я думаю, что один из них - сбросить голову или перебазировать, другой - git pull origin master --allow-unrelated-histories, а затем git push origin master. Я не уверен, какой способ является наиболее эффективным / наименее разрушительным способом решения этой проблемы. Как правило, меня не очень беспокоит случайное удаление LICENSE или readme.md, но было бы плохо, если бы я случайно удалил исходный код локального репозитория, конечно.

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

1 Ответ

1 голос
/ 15 марта 2020

Я вижу две возможности, хотите ли вы сохранить свою удаленную историю (т. Е. Начальную фиксацию на GitHub):

Все команды предполагают, что вы в данный момент находитесь на локальном master (git checkout master ) ветвь и все изменения фиксируются (т. е. рабочий каталог чист)

Перезаписать удаленную историю

Если вам не нужна история на GitHub (то есть одна первоначальная фиксация, содержащая LICENSE и README file), вы можете просто принудительно заставить pu sh в свой удаленный репозиторий

git remote add origin your_github_repository_url
git push origin +master:master

Это будет pu sh вашего локального главного коммита на удаленном и перезаписать любые коммиты, которые существуют удаленно (т.е. на GitHub). Это не повлияет на вашу местную историю.

Сохранить всю историю

Это немного сложнее, но все же довольно просто. Вам нужно извлечь обе (не связанные) строки истории в один репозиторий, а затем объединить / перебазировать (это изменит хеши коммитов одной из двух веток):

   git remote add origin your_github_repository_url
   git fetch
   git rebase origin/master master
   git push origin master:master

Это перебазирует ваш локальный мастер поверх удаленного (= GitHub) мастера. Все ваши локальные хеши фиксации будут изменены (но, поскольку это новый проект, это, вероятно, не большая проблема).

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

   git remote add origin your_github_repository_url
   git fetch
   git cherry-pick origin/master
   git push origin +master:master

Это позволит выбрать (т.е. скопировать) последний коммит с удаленного (= GitHub) поверх локальной ветки master и затем принудительно-пу sh ваша локальная главная ветвь над удаленной главной ветвью.

ПРИМЕЧАНИЕ: если вы боитесь потерять свои локальные изменения / файлы / фиксации → сначала сделайте резервную копию вашего репозитория (просто скопируйте полный каталог со всеми подкаталогами)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...