по пп.2 соглашусь частично, только с оговоркой, что в п. тесты должны быть "зелёными" (даже при нереализованных методах).
я считаю (и не только я, мейнтейнеры и разработчики самого Git'а - тоже), что каждый коммит должен быть "рабочим": как собираться (build), так и проходить все тесты.
вот для примера моя пара коммитов в Git:
первый
https://github.com/git/git/commit/d928d81051fc8475... - добавляет в том числе тесты, которые не проходят (expect failure)
следующий коммит
https://github.com/git/git/commit/7d509878b845a2a8... - исправляет ошибку и исправляет лишь expected failure на expected success в ранее добавленных тестах.
таким образом, когда вы или кто-либо будет искать ошибочный коммит с помощью
git bisect
, он имееет больше шансов быстро найти его, запустив
git bisect run
, не прибегая с ручной проверке каждого коммита или коммитов, где тесты падают, например.