Как зафиксировать серьезные изменения в репозитории Git, сделанные вне этого репо? - PullRequest
1 голос
/ 31 октября 2019

Предположим, что произошло следующее:

  1. Репозиторий git не обновлялся в течение года. В этом году кто-то еще в основном пересмотрел код в своей собственной копии.
  2. Вы хотите обновить репо с помощью своих версий кода, чтобы эти изменения отображались в истории фиксации в дальнейшем.
  3. Вытаким образом, получите копию их кода, запустите git remote add origin https://github.com/account/repo-name.git и попробуйте отправить этот код в репозиторий.

Эта попытка не удастся с ошибкой «Обновления были отклонены, поскольку на удаленном компьютере содержится работа, которой у вас нет локально»

Итак, как вы можете достичь цели на шаге 2?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Создайте ветку на точно ревизии, с которой начал работать человек, работавший отдельно. Затем удалите все файлы из него (используйте git rm для удаления) .... затем поместите туда любой код пользователя .... затем добавьте все это и зафиксируйте (используйте --author="batman forever" с именем разработчика, чтобычто вы знаете, кто на самом деле это сделал), и затем вы можете использовать эту работу для объединения или того, что вы считаете нужным сделать.

0 голосов
/ 31 октября 2019

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

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

Простой способ отменить это - удалить репозиторий с вашего компьютера, а затем отменить его. Конечно, делайте это только в том случае, если в вашем локальном репо нет работы, которой нет в удаленной копии. Другой вариант - последовать совету здесь , чтобы сбросить локальный мастер на то, что находится на сервере.

Затем в локальном репо создайте новую ветку для выполнения изменений. Эта ветка должна начинаться с того же HEAD, что и master.

#make sure we base our work off master
git checkout master

#create a new branch to contain the changes and switch to it
git checkout -b feature/john-doe-changes

#push the branch up to the server
git push -u origin feature/john-doe-changes

Затем возьмите код от другого разработчика и интегрируйте его с вашей текущей кодовой базой.

Как только выГотово, и все работает, как вы хотите, зафиксируйте изменения и отправьте их на сервер.

git commit -m "Integrated code from John Doe"
git push

На этом этапе вы можете перейти на сайт GitHub и открыть PR. Исходная ветвь - feature/john-doe-changes, а целевая ветвь - master. Просмотрите PR, чтобы убедиться, что вы довольны им. Попросите других разработчиков вашей команды проверить его, если это практика вашей компании, или они готовы это сделать.

Если какие-либо изменения необходимы, внесите их локально, затем подтвердите и отправьте их на сервер.

Затем завершите PR, который объединит изменения от feature/john-doe-changes до master на сервере.

Затем в локальном репо вы можете выполнить очистку.

#switch to master
git checkout master

#pull changes from remote master to your local master
git pull

#update your remote references
git fetch --prune

#remove the feature branch, it's not needed anymore
git branch -d feature/john-doe-changes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...