git: поделитесь работой по слиянию двух веток - PullRequest
4 голосов
/ 28 февраля 2010

Я хочу объединить очень разнородные ветви Git вместе. Это будет много работы, потому что у них несколько сотен конфликтов.

Что было бы лучшим способом, чтобы, возможно, другие также могли помочь мне, а также работать над этим слиянием?

Обычно я делаю "git merge ...", затем прохожу все конфликты, разрешаю их, затем делаю коммит. Но это локально только тогда.

Работа по разрешению конфликта может занять несколько дней. Я хочу разместить свои изменения в сети уже во время работы над ним.

Ответы [ 2 ]

2 голосов
/ 10 марта 2010

Недавно столкнувшись с этой проблемой, я решил перемотать разветвленную ветвь, которая будет объединена, до последнего общего коммита (который я обнаружил с помощью git cherry -v upstreambranch divergedbranch) и удалить все коммиты, которые я не хотел объединять , (То есть те коммиты, которые уже присутствуют в основной ветке, если с другим хешем.)

Итак, из списка коммитов в

git rebase -i --onto lastcommoncommit upstreambranch divergedbranch

Я удалил все коммиты, которые были перечислены в

git log lastcommoncommit..upstreambranch

Результатом этого является чистая, но немного устаревшая ветка тем, содержащая только коммиты, которые еще не являются частью upstreambranch.

С этого момента в основном есть два пути:

  1. Вы можете git cherry-pick коммитить из устаревшей ветки bancleantopic в ГОЛОВУ ветки восходящего потока, начиная с самого старого нефиксированного коммита.
  2. Перебазировать устаревшую ветвь-ветвь к более старым состояниям ветки вверх по течению, как git rebase --onto upstreambranch@{4 weeks ago} upstreambranch

После завершения сеанса rebase / cherry-pick вы вносите свои изменения в ветку интеграции, где кто-то другой может продолжать использовать тот же процесс.

2 голосов
/ 05 марта 2010

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

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

Например, у вас есть основная ветвь и совсем другая ветвь с именем b.

если вы переключитесь на мастер и выполните git merge b, вы получите тонну конфликтов.

Итак, вы начинаете искать в истории, где master и b разделены. Затем возьмите, например, третий коммит в ветке b и объедините его

git merge <sha_in_b_branch>

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

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