Я хочу не в интерактивном режиме удалить из моей истории неотправленные коммиты, содержащие ключевое слово темы (аналогично интерактивной перебазировке, когда строки, содержащие ключевое слово, удаляются).
Следующая функция nocommit в ~/.gitconfig достигает почти того, что я хочу, за исключением того, что создается новая результирующая ветвь.
nocommit = "!f() { \
for i in `git log --oneline FETCH_HEAD.. |grep NOCOMMIT | awk '{ print $1 }'`; \
do \
git log -n1 --oneline $i; \
git rebase --onto $i^ $i HEAD; \
done; \
}; f"
Это также должно быть возможно сделать с помощью хука git push, но у нас уже есть три хука, которые я не хочу модифицировать.
Редактировать: решено с помощью этой команды (вдохновлено ответом Эндрю С):
GIT_EDITOR="sed -i '/NOCOMMIT/d'" git rebase -i @{upstream}