Я хотел бы неинтерактивно удалить нечистые коммиты, содержащие ключевое слово из моей истории (аналогично интерактивной перестановке, где строки, содержащие ключевое слово, удаляются).git remove совершает неинтерактивно
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"
Она также должна быть возможность сделать это с помощью мерзавец нажимной крючка, но у нас уже есть в три крючка в том, что я не хочу, чтобы изменить.
Edit: решаемые с помощью этой команды (Вдохновленный ответ от Andrew C):
GIT_EDITOR="sed -i '/NOCOMMIT/d'" git rebase -i @{upstream}
Возможный дубликат [Использование git filter-branch для удаления коммитов по их сообщению фиксации] (http://stackoverflow.com/questions/4558162/using-git-filter-branch-to-remove-commits-by-their -commit-message) – Jubobs
Я боюсь, что это не гарантировано неинтерактивным. Всякий раз, когда вы удаляете фиксацию из истории, существует риск возникновения конфликтов, и они должны быть разрешены в интерактивном режиме. –