Примечание. Вопрос аналогичен этому, но с некоторыми важными изменениями.
У меня есть следующая функция для перезаписи даты фиксации с учетом идентификатора фиксации:
rewrite-commit-date () {
local commit="$1"
local newdate="$2"
newdate="$(date -R --date "$newdate")"
echo ">>>> Rewriting commit $commit date: $newdate"
git filter-branch --env-filter \
"if test \$GIT_COMMIT = '$commit'
then
export GIT_AUTHOR_DATE
export GIT_COMMITTER_DATE
GIT_AUTHOR_DATE='$newdate'
GIT_COMMITTER_DATE='$newdate'
fi" &&
rm -fr "$(git rev-parse --git-dir)/refs/original/"
}
Я пытаюсь реализовать аналогичную функцию rewrite-commit-message
для изменения сообщения фиксации. Я хочу:
- Функция
rewrite-commit-message
принимает два параметра:commit_id
иnew_commit_message
. - Нет необходимости знать старое сообщение коммита: достаточно иметь
commit_id
, чтобы знать, какой коммит нужно изменить. - Нет
git commit --amend
, так как это связано со старыми фиксациями (не обязательно с самой последней фиксацией) - Не беспокойтесь о переписывании истории и основного репозитория: я работаю в функциональной ветке, и мне разрешено делать
git push -f
- I would like to use
filter-branch
for this, but I am not sure how to:- apply the change to a specific commit: the
test
used in therewrite-commit-date
function is used inenv-filter
, but I am not going to doenv-filter
here, since I do not want to change anything related to the commit environment, but the commit message. - как заставить сообщение коммита?
--msg-filter
требуется исходное сообщение фиксации. Меня не волнует исходное сообщение коммита. Есть ли--force-msg-filter
или аналогичный?
- apply the change to a specific commit: the
То, что я ищу, похоже на это, но с некоторыми оговорками:
- Применяйте изменение не к диапазону коммитов, а к конкретному коммиту.
- Меня не волнует исходное сообщение фиксации, так как я хочу полностью перезаписать его