Слияние мерзавца повторно применяет фиксации на другую фиксацию?

Мне 15 лет и только что начал использовать системы управления исходным кодом для управления моим кодом немного лучше, таким образом, я немного плохо знаком с этим материалом. Прямо сейчас у меня есть этот репозиторий:

[a]---[b]---[d]---[f] master
        \
         \
          [c]---[e]   develop

Я хочу закончиться здесь:

[a]---[b]---[d]---[f]---[g]  master
        \               /
         \             /
          [c]---[e]---/      develop

где g эквивалентно выполнению фиксаций [c] и [e] на [f]. Это git checkout master; git merge develop, право?

9
задан Greg Bacon 18 December 2013 в 00:06
поделиться

4 ответа

Нарисованная вами картинка выглядит как результат git merge , но ваше описание того, что вы хотите, звучит как git rebase .

Заимствуя из главы «Перебазирование» книги сообщества git, если вы находитесь в ветке mywork и говорите

$ git merge origin

, вы получите

git merge history

Think объединения двух разных снимков: в этом случае C4 и C6 объединились, чтобы создать C7.

Rebase создает дерево, которое выглядит так же, как C7, но его история выглядит совершенно иначе. Скажем, вместо слияния вы дали команду

$ git rebase origin

, которую получили бы

alt text

. Когда вы обнаружите, что хотите: «Я действительно хочу, чтобы я создал ветвь mywork в C4 вместо C2», git rebase - джинн, который его предоставит.

Вы также можете думать о перебазировании как о вырезании ветви из вашей истории и переносе ее в другую точку. Не пропустите тонкое изменение с C5 и C6 на C5 'и C6'. Хотя деревья будут выглядеть одинаково, у них будут разные родители, что изменит их идентичность git.

6
ответ дан 4 December 2019 в 22:27
поделиться

Еще одна полезная информация о слиянии - это http://progit.org/book/ch3-2.html и http://gitref.org/branching / # слияние .

1
ответ дан 4 December 2019 в 22:27
поделиться

Это git checkout master, чтобы попасть на ветку 'master', затем git merge develop чтобы объединить ветку 'develop' с текущей веткой 'master'.

0
ответ дан 4 December 2019 в 22:27
поделиться

Вы хотите git checkout master; git merge develop

Это происходит потому, что git merge принимает имя ветки, которую вы хотите объединить с текущей проверенной веткой. Таким образом, вы проверяете желаемую целевую ветвь (master), а затем сливаете с ней другую ветвь (develop).

Если вы посмотрите в первый раздел "Описание" на странице git-merge man, вы увидите схему, почти идентичную вашей (хотя и перевернутую вертикально), которая описывает это.

1
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: