Как синхронизировать ветку git с master? - PullRequest
0 голосов
/ 28 января 2012

В настоящее время у меня есть git-репозиторий на github, в котором хранятся файлы пакетов для нескольких пакетов со структурой каталогов, подобной этой:

package-a
  `- PKGBUILD
package-b
  `- PKGBUILD
package-c
  `- PKGBUILD
xorg
  `- PKGBUILD
libx11
  `- PKGBUILD

Я создал экспериментальную ветку newxorg, которая содержит файлы упаковки для новой версии xorg и libx11, а также обновленные package-a и package-b для master. Моя история примерно такая:

M1 -- M2 -- M3 -- M4
       \
        B1 -- B2

where:
B1 = "Update xorg"
B2 = "Update libx11"
M3 = "Update package-a"
M4 = "Update package-b"

В идеале, я бы хотел, чтобы моя новая ветка содержала коммиты M3 и M4 из master, например:

M1 -- M2 -- M3 -- M4
                   \
                    B1 -- B2

Но проблема в том, что я уже отправил ветку master и newxorg на удаленный сервер github. Поскольку люди уже клонировали новую ветку, я полагаю, что ребейс действительно испортит им жизнь. Как лучше всего объединить новые коммиты от мастера?

1 Ответ

1 голос
/ 28 января 2012

Если на * 1001 не слишком много новых коммитов, я бы cherry-pick их на newxorg.

По вашему примеру, выбор вишни M3 и M4 с master на newxorg приведет вас к:

M1 -- M2 -- M3 -- M4
   \
    B1 -- B2

до:

M1 -- M2 -- M3 -- M4
   \
    B1 -- B2 -- M3 -- M4

У вас будет M3 и M4 отдельно на newxorg.

При выборе вишни у вас будет "маленькая" проблема , если вы решите объединить newxorg с мастером (позднееstage) поскольку cherry-pick создаст другие коммиты, идентичные в каждой точке исходным M3 и M4 , но с другой хэш sha1 .Вы (и другие) увидите это в истории как дублирующие коммиты ...

Существует также возможность слияния master в newxorg (но это приведет к другому слиянию)коммит, так что это не совсем то, что вы просили).

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

Выберите любой методВы считаете нужным.


LE.Детали слияния

Как вы и просили, вот немного больше информации о методе слияния:

  1. извлечение ветки newxorg (git checkout newxorg)
  2. слияниеmaster в newxorg (git merge master)

Если у вас возникли проблемы с проверкой ветки newxorg, вам может понадобиться stash theизменения, которые у вас есть в вашей рабочей копии: git stash и когда вам понадобятся эти изменения обратно, вы можете сделать git stash pop (pop применяет изменения и затем сбрасывает тайник) или git stash apply (apply применяет изменения и сохраняет тайник).

Вот начальная настройка :

initial setup

и окончательная настройка :

final setup

На более позднем этапе, когда вы хотите объединить newxorg в master, используйте следующие команды:

git checkout master
git merge newxorg

Если у вас возникнут конфликты при объединении, вы можете использовать git mergetool для разрешения конфликтов.Возможно, вам потребуется настроить инструмент визуального слияния, такой как p4merge (который является кроссплатформенным).

PS. на случай, если вы 'интересно, откуда я взял эти скриншоты: они из вашего репозитория на github .

...