Ответ 1
Чтобы ответить на исходный вопрос о том, как вишнево выбрать некоторые каталоги (как коммиты вместо проверки грубой силы), это возможно. Представьте, что featureA
отклонился от master
и вы хотите выполнить транзакции tools/my-tool
.
Предполагая, что вы никогда не делали никаких коммитов, которые содержат оба материала из
/tools/my-tool
и прочее из других каталогов
Это даст вам список коммитов master
в tools/my-tool
(которые еще не находятся в featureA
) в обратном хронологическом порядке:
git log --no-merges featureA...master tools/my-tool
Сказать это по-другому:
git log --no-merges source_branch...dest_branch my/firstpath my/secondpath [...]
Чтобы получить только требуемые коммиты в хронологическом порядке, сначала нужно изменить порядок входных строк (например, с помощью tail -r
или tac
), затем изолировать столбец для хеширования фиксации (например, с помощью cut
):
git log --format=oneline --no-merges featureA...master tools/my-tool \
| tail -r \
| cut -d " " -f 1
И чтобы выполнить всю операцию сразу, сделайте следующее:
git cherry-pick $(git log --format=oneline --no-merges featureA...master tools/my-tool | tail -r | cut -d " " -f 1)