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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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 и мерзавец для отправки изменений по электронной почте

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

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