Давайте разберемся, что случилось.
- У меня есть две ветви функций A и B.
Обычно это что-то вроде этого.
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
\
7 - 8 [B]
A и B разветвлены master
.Они расходятся.
Но вы, возможно, имели это.
6 - 7 [B]
/
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
Здесь B ответвляется от A. B разделяет все коммиты A.Давайте предположим, что.
- Создать новую ветвь C, ответвляющуюся от A
Создание новой ветки в Git просто создает новую метку натот же коммит, что и A.
6 - 7 [B]
/
4 - 5 [A][C]
/
1 - 2 - 3 - 6 [master]
- Оформить новую ветку C
- запустить
git merge B
из командной строки
Когда это происходит, Git замечает, что C является предком B. Поэтому он выполняет «ускоренную перемотку вперед», что означает, что он не беспокоится о слиянии, он просто переводит C туда, где B.
6 - 7 [B][C]
/
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
Если A и B изменили одни и те же файлы, может показаться, что B перезаписал изменения в A.
git log
, а Github, к сожалению, сглаживает вашу историю Git, создавая ложное впечатление, что она линейна.Вы можете увидеть истинную структуру вашего хранилища с помощью git log --graph --decorate --all
и проверить, соответствует ли он сценарию здесь.