Git - вытащить изменения из клона обратно на мастера - PullRequest
5 голосов
/ 13 ноября 2008

Я клонировал мастер Git и внес много изменений в клон. С тех пор я внес эти изменения в клон и теперь хочу, чтобы мастер был точной копией того, что находится в клоне.

Я пытался использовать Git push для клона, чтобы передать изменения в мастер - но ничего не делал, я не обновлял мастер.

Как я могу сделать мастер точной копией того, что находится на клоне? Каков командный рабочий процесс обновления клона и синхронизации мастера с клоном?

Ответы [ 3 ]

6 голосов
/ 13 ноября 2008

Есть 2 вида git-репозитория, голые и не голые. Хранилище, не являющееся пустым, - это любое хранилище, которое имеет «рабочую копию», то есть некоторую часть хранилища, которая в настоящее время извлечена.

Вы можете вставить в не пустой репозиторий, но он не обновит извлеченную рабочую копию, даже если извлеченная ветвь совпадает с веткой, которую вы нажали. Это связано с тем, что у извлеченной копии могут быть изменения, которые не зафиксированы, и git никогда не уничтожит изменения без вашего явного запроса (обычно такие команды имеют аргумент --hard)

Чтение Почему я не вижу изменений в удаленном репо после "git push"? и Как бы я использовал "git push" для синхронизации с брандмауэром хоста? для полного описания проблемы и потенциального решения. Слово предупреждения: если вы запустили удаленное репо, любые не зафиксированные изменения в этом удаленном репо придется отбросить.

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

5 голосов
/ 13 ноября 2008

Если вы создали свой собственный клон, который легко доступен из мастера, то вы можете легко перенести изменения из клона в мастера. Просто:

git pull /path/to/clone

Это перетянет изменения из ГОЛОВКИ клона в ГОЛОВУ мастера.

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

  • общий репозиторий, к которому толкает клон и из которого извлекает мастер (например, github или просто пустой репозиторий)
  • git-bundle для перемещения пакета изменений в файл
  • git-format-patch и git-am для отправки изменений по электронной почте
2 голосов
/ 14 ноября 2008

Мне нравятся ответы Гарета и Грега. Я бы просто добавил, что мне очень удобно использовать пустой репозиторий для синхронизации работы с другими. Это позволяет любому отправить / вытащить свои изменения (включая ветки) в пустой репозиторий, а затем другие могут получить / вытащить / объединить, как они считают нужным. Это не то же самое, что иметь один центральный репозиторий, поскольку каждый клон является полноценным репозиторием.

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