Сделайте Git pull, чтобы перезаписать локальные изменения - PullRequest
7 голосов
/ 07 июня 2011

Конечно, для этого были сообщения, но я действительно сделал коммит, потому что думал, что это правильно.

Итак, у меня есть два репозитория, один для разработки и один для производства. Мне пришлось что-то редактировать в производственном процессе, потому что это было срочное исправление, и теперь у меня есть три файла, более новых в производственном процессе, чем в разработке.

Я зафиксировал три файла на производстве и попытался вытащить, но он сказал мне, что были ошибки слияния. Я попытался скопировать и вставить новые файлы на сервер разработки и повторить попытку, но это не сработало. Теперь я уверен, что мне нужно разработать (так как я скопировал и вставил в него) и зафиксировать, так как я могу извлечь и перезаписать конфликтующие файлы?

<Ч />

---- После ответа @Seths

Хорошо, наверное, мне нужно перефразировать мой вопрос :) У меня есть три хранилища. Одна разработка, одна в GitHub и одна продукция. Обычно для обновления производства я просто делаю переход от разработки к GitHub, git pull origin master (от GitHub к производству), и он работает.

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

Ответы [ 2 ]

22 голосов
/ 07 июня 2011

Если вы хотите полностью заменить локальную ветку foo содержимым удаленной ветки origin / foo:

git fetch origin
git checkout foo
git reset --hard origin/foo

Если вы хотите сделать что-то еще, пожалуйста, переформулируйте ваш вопрос.Однако я мог бы добавить производственный репозиторий Git в качестве удаленного, а затем объединить текущие изменения вместо того, что вы пытались.

1 голос
/ 07 июня 2011

Вам нужно сначала перейти с производства на GitHub:

git push origin yourbranch --force

Сила будет гарантировать, что GitHub обладает тем, что имеет производство.

Вот возможности того, что вы можете сделать:

Вам нужно будет загрузить изменения в свой репозиторий разработки в репозиторий развертывания.В этот момент вы увидите, что история разветвляется (через git log --all --graph или gitk --all).

git fetch origin

Теперь вы можете перебазировать или объединить, чтобы ваши последние изменения следовали за изменениями, внесенными впроизводственный репозиторий.Это позволит вам вносить изменения в репозиторий развертывания на более позднем этапе.

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

Если вы хотите, чтобы конфликты были разрешены путем использования того, что находится на производственной стороне, вы можете использовать стратегию "рекурсивного их":

git merge -s recursive -Xtheirs production/yourbranch

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

git merge production/yourbranch
git checkout production/yourbranch -- .
git submodules update #this is optional and can be skipped if you don't have any submodules
git add -A
git commit

Теперь последующие нажатия на GitHub изРазработка и загрузка из GitHub в рабочем режиме будут работать.

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

git reset --hard production/yourbranch
...