Я составил следующее решение. Он не выглядит идеально, но делает свою работу, и в моем тесте на здравомыслие он не подведет, например. с сообщениями о фиксации, которые имеют одну двойную кавычку:
git rebase HEAD~2 -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -ne \\nReviewed-by: User \<mail\>.)"'
Давайте разберем команду:
git rebase HEAD~2 -x …
выполняет перебазирование n коммитов (где n = 2) , к которым вы хотите добавить Reviewed-by
, и для каждого коммита он останавливается и выполняет следующую команду оболочки.
git commit --amend -m…
вносит изменения в коммит и заменяет его сообщение следующим.
git log --format=%B -n1
печатает сообщение "текущего" коммита.
echo -ne \\nReviewed-by: User \<mail\>.
это немного сложно. Очевидная часть заключается в том, что он добавляет текст Reviewed-by
. Менее очевидным является то, что при выполнении встроенной команды удаляются завершающие пробелы, т. Е. Выходные данные предыдущей команды не имеют перевода строки. Итак, echo
здесь добавляет символ новой строки, а затем текст.
Вы можете использовать его как есть, извлекая его из истории команд, или обернуть его в функцию bash / zsh, например ::
# adds reviwed-by to n commits
function git_rb() {
# export arguments, otherwise they're not visible to inline shell executions
export who=$1
export mail=$2
export n=$3
git rebase HEAD~$n -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -e \\nReviewed-by: ${who} \<${mail}\>.)"'
}
, а затем использовать его как
$ git_rb "Holy Moly" "Holy@example.com" 5