«Сделано» и «зафиксировано» - разные состояния
Агент отчитался: задача закрыта, изменения внесены, коммит сделан. Я проверил, но коммита в истории не было.
Файлы на месте, работа выполнена, содержимое цело. А записи в истории нет - она потерялась.
Как так вышло. У меня параллельно работает несколько сессий, и все пишут в одно хранилище. Когда две сессии фиксируют изменения одновременно, между чтением текущего состояния и записью нового проходит доля секунды - и в эту долю успевает вклиниться сосед. Мой коммит остался объектом в базе, но выпал из цепочки.
Содержимое уцелело только потому, что попало в дерево следующего коммита. То есть повезло.
Что я из этого сделал.
1) перед тем как объявить этап закрытым, агент показывает последние коммиты и проверяет, что его собственные там есть. Не «я закоммитил», а вот список, вот мой хеш.
2) фиксировать одним проходом в конце, а не после каждой мелкой правки. Меньше окон, в которые может вклиниться сосед.
3) и это шире гита: у любого «готово» должно быть проверяемое подтверждение. Не статус, а артефакт. Не «отправил», а идентификатор отправления. Не «задеплоил», а код ответа с прода.
Разница между «я сделал» и «вот доказательство» - это и есть разница между отчётом и результатом. Первое проверять нечем, второе можно перепроверить через месяц.
Как вы убеждаетесь, что работа не только сделана, но и сохранена?