Git 2.56
Коротко сгенерировано ИИ по тексту статьи
- В Git 2.56 вошли 748 изменений от 104 разработчиков, включая 39 участников, впервые работавших над проектом.
- Новый режим `git add --resolved` проверяет конфликтные файлы и не индексирует их, если в них остались маркеры конфликта.
- Поиск общих коммитов в одном репозитории ускорился в среднем в 20 раз, а обработка `git diff` в Chromium — с 8 минут до 0,07 секунды.
Почему это важно: Новый режим `git add --resolved` позволяет завершать слияние, не затрагивая другие незавершённые правки в рабочем каталоге.

Представлен релиз распределенной системы управления исходными текстами Git 2.56. Код Git распространяется под лицензией GPLv2+. По сравнению с прошлым выпуском в новую версию принято 748 изменений, подготовленных при участии 104 разработчиков, 39 из которых впервые приняли участие в разработке Git.
Основные новшества (github.blog, gitlab.com/blog, gitlab.com/git-scm):
- Добавлен режим
git add --resolvedдля разрешения конфликтов при слиянии веток, который проверяет файлы на наличие маркеров конфликта и при выявлении маркера хотя бы в одном файле выдаёт ошибку, не индексирует ни один из файлов и показывает список файлов требующих исправления. В отличие от командыgit add --updateв новом режиме обрабатываются только файлы, находящиеся в состоянии конфликта, а не связанные с конфликтом изменённые файлы игнорируются, что позволяет безопасно завершать слияние веток, даже если в рабочем каталоге находятся другие незавершённые правки (командаgit add --updateдобавляла в индекс все ранее отслеживаемые изменённые файлы в рабочем каталоге). - Значительно ускорена работа с большими репозиториями, за счёт оптимизации алгоритма поиска последних общих коммитов при слиянии веток и сравнении коммитов. В процессе работы теперь учитываются коммиты, принадлежащие исключительно одной из веток, что позволяет остановить сканирование сразу после обнаружения всех возможных общих предков, не тратя время на дальнейший перебор истории изменений. В одном из протестированных репозиториев скорость поиска выросла в среднем в 20 раз, а в другом ускорение достигало 70 раз. При выполнении команды
git merge-base --all v4.8 v4.9в репозитории с ядром Linux количество шагов обхода уменьшилось со 167 тысяч до 3.8 тысяч. - Для серверного применения адаптирован режим перепаковки
--path-walk, позволяющий создавать более компактные pack-файлы за счёт группировки объектов по их пути в дереве каталогов (например, для репозитория Fluent UI использование--path-walkпозволило уменьшить размер pack-файла с 558 МБ до 164 МБ). В новой версии реализована возможность использования режима--path-walkсовместно с битовыми картами достижимости («reachability bitmap») и дельта-островами («delta island»), применяемыми git-хостингами для ускорения работы и изоляции форков от основного репозитория. - Устранены узкие места, приводившие к избыточным вычислениям в больших репозиториях: убраны лишние проверки состояния файлов при записи в
reftable; исключено повторное сканирование списка при каждой вставке нового pack-файла; ускорены операции сreftable, в которых накопилось много записей об удалении; оптимизирована работаgit diffпри указании ограничений по файловым путям. После внесения оптимизаций работа сreftableпри большом числе удалений ускорилась в 65 раз (с 13 секунд до 0.2 секунды), а выполнение проблемной командыgit diffв репозитории Chromium с 500000 элементами в индексе стало занимать 0.07 секунд вместо 8 минут. - В экспериментальную команду
git history, предоставляющую возможности для перезаписи истории изменений, добавлена операцияgit history dropдля удаления выбранного коммита с автоматическим прикреплением его потомков к родительскому коммиту. - Добавлена команда
git branch --delete-merged 'origin/*' 'topic-*'для безопасного удаления групп локальных веток, изменения из которых уже переданы во внешний репозиторий. Для фильтрации веток и репозиториев допускается использование масок. Для анализа претендентов на удаление, без фактического выполнения операции, можно использовать флаг--dry-run. - Добавлена команда
git refs create|update|delete|rename, в которой объединены низкоуровневые операции для создания, удаления, переименования и обновления ссылок. - В команду
git bisect runдобавлена опция--reset-when-found=[], которая автоматически возвращает репозиторий в состояние до начала поиска или оставляет активным проблемный коммит, без необходимости отдельного запуска командыgit bisect reset. - В команду
git replayдобавлен флаг--linearizeдля использования плоской топологии слияния, по аналогии сgit rebase --no-rebase-merges, но без обращения к рабочему дереву. - В команде
git log --followреализовано отслеживание переименования файлов в нелинейной истории изменений, например, при слиянии подветок. Путь к файлу теперь фиксируется отдельно для каждого родительского коммита, что делает результат независимым от порядка обхода истории коммитов. - Добавлена возможность применения команды
git repack -a --filter=blob:limit=1m --drop-filteredдля удаления больших blob-объектов, загруженных на лету («on demand») из внешнего репозитория и не используемых в текущем индексе. При обращении к этим объектам в дальнейшем они будут автоматически повторно загружены. - В команде
git log --graphдля графов с несколькими независимыми корнями реализовано добавление отступов для наглядного отделения несвязанных коммитов. - Обеспечено выявление типовых опечаток, таких как указание
git push origin/mainвместоgit push origin mainилиgit branch --set-upstream-to origin mainвместоgit branch --set-upstream-to=origin/main, и вывод подсказки по использованию корректного варианта.
Об этом также пишут
- OpenNet Выпуск системы управления исходными текстами Git 2.56 29.09.2026 08:59
