Git - перенос изменений из клона обратно в мастер

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

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

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

Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
5
0
2 235
3

Ответы 3

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

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

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

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

Гарет, спасибо за это объяснение. Является ли каноническим решением необходимость в третьем репозитории, к которому не прикреплено дерево? Разве это не возвращение к концепции svn центрального репозитория?

David Nehme 13.11.2008 18:33

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

Gareth 13.11.2008 20:14

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

git pull /path/to/clone

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

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

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

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

Другие вопросы по теме