Что такое краткий способ запросить «вишневый выбор из другой ветви только коммитов, которые касаются определенного файла»? то есть команда git log ..other-branch afile
дает список несвязанных коммитов в другой ветке, которые касаются «файла»; как я могу попросить повторить этот же набор коммитов в текущей ветке?Cherry pick только фиксирует то, что касается конкретного файла
ответ
git cherry-pick $(git log --reverse --pretty=format:"%H" filename)
Если сделать трюк. git log --reverse --pretty=format:"%H" filename
в основном дает вам список символов SHA всех строк, которые изменили filename
в обратном порядке, чтобы сумма слияния в правильном порядке. Затем мы подаем список на git cherry-pick.
git cherry-pick $(git rev-list --reverse HEAD -- filename)
- другая версия вышеуказанной команды, предоставленная Магнусом Бэком.
", а затем sed заменяет все \ n (новые строки) на пробелы "- вам это не нужно. Пока IFS имеет значение по умолчанию, новая строка и пробелы ведут себя одинаково в некотируемом расширении $ (...). – hvd
Я закончил тем, что использовал такую конструкцию - мне все еще интересно, есть ли способ сделать это, что не связано с интерполяцией команды bash. Я предполагаю, что это не достаточно распространенная потребность ... – gcbenison
Ну никогда не пробовал это без части sed и не имел тестового примера, поэтому я не хотел публиковать что-то, что я раньше не тестировал. – Learath2
Не можете ли вы просто объединиться в последнее совершение, касающееся соответствующего файла? – dezman
@watson Я не могу этого сделать, потому что это тоже объединит множество коммитов, которые я не хочу объединять. Я хочу только внести изменения из небольшого подмножества коммитов, которые касаются одного файла. – gcbenison
Я не думаю, что то, что вы хотите, возможно, вам придется либо захватить только один файл, все, начиная с последней фиксации, которая изменила этот файл, или какой-то захват файлов из последней фиксации, которую вы думаете имеют значение. – dezman