Предположим, у вас есть следующие две ветви, где каждая буква представляет хеш коммита:
C---------D feature
/
A---B---E---F---H master
Пока вы работаете с веткой feature
, рекомендуется синхронизировать ее с master
, чтобы уменьшить количество конфликтов слияния, когда вы в конечном итоге создаете запрос на извлечение в master
.
Чтобы синхронизировать ветку feature
, у вас есть несколько вариантов:
1. Добавление всех коммитов от master
до feature
:
git checkout feature
git merge master
Пример: если вы находитесь в коммите D
в ветви feature
и выполняете команды, указанные выше, вы примените коммит E
, F
и H
к ветви функции.
Подробнее об этом здесь: git merge
2. Добавление только определенных коммитов от master
до feature
git checkout feature
git cheery-pick <commit-hash>
Пример: Запуск git cherry-pick F
только добавит коммит F
в вашу ветку feature
.
Подробнее об этом можно прочитать здесь: git cherry-pick
3. Добавление только определенных файлов от master
до feature
git checkout master <path/to/filename>
Пример: Запуск git checkout master src/index.js
добавит файл index.js
из commit H
в вашу ветку feature
.
Если вместо этого вы хотите добавить index.js
из коммита F
, вы можете использовать следующие команды:
git checkout master~1 src/index.js
или
git checkout <commit-hash> <path/to/filename>
Подробнее о команде: git checkout
4. Добавление только определенных строк файла от master
до feature
git checkout master <path/to/filename> -p
Пример: если вы запустите git checkout master src/index.js --patch
, вы можете решить, какие фрагменты файла src/index.js
из коммита H
вы хотите добавить в ветку feature
.
В основном я использую опции 1. и 2. для синхронизации своих веток - иногда также 3. Конечно, есть много других способов добиться того же с помощью git, вы также можете посмотреть в этой теме для некоторых альтернатив.