Где мы сейчас: линия 2.5x в середине 2026
Актуальная серия к середине 2026 - это 2.5x. В апреле 2026 вышел Git 2.54, и именно на него стоит калибровать привычки. Многое из того, что ещё пару лет назад было экспериментом, давно стабильно и должно быть твоим дефолтом по умолчанию.
Код: Выделить всё
$ git --version
git version 2.54.0
$ git switch -c feature/login # не checkout - switch стабилен с 2.51
Switched to a new branch 'feature/login'
$ git restore --staged file.txt # restore тоже стабилен, забудь про checkout -- file
В 2.54, кстати, появилась экспериментальная команда git history с подкомандами reword и split - более простой путь точечного переписывания истории, чем интерактивный rebase. А дефолтом ручного обслуживания стала геометрическая стратегия git maintenance: вместо дорогих полных перепаковок, как у легаси-gc, паки сливаются инкрементально по геометрической прогрессии.

Что меняет git 3.0: четыре больших сдвига
Git 3.0 целится в конец 2026 и это первый major со времён 2.0 (2014 год). Майорный номер тут означает не гору новых фич, а смену дефолтов и удаление легаси - то, что нельзя поменять в минорной версии без нарушения обещания обратной совместимости. Разбираем по пунктам.
1. Имя ветки по умолчанию -> main. Сейчас, в 2.54, ты при git init всё ещё получаешь master плюс подсказку-хинт о том, что дефолт настраивается. В 3.0 встроенным дефолтом станет main. Это не значит, что master запрещён - просто из коробки новые репозитории будут стартовать с main. Не жди 3.0, поставь это сам прямо сейчас:
Код: Выделить всё
$ git config --global init.defaultBranch main
$ git init demo
Initialized empty Git repository in /home/user/demo/.git/
$ cd demo && git symbolic-ref HEAD
refs/heads/main
Код: Выделить всё
$ git init --object-format=sha256 secure-repo
$ cd secure-repo && git commit --allow-empty -m init -q
$ git rev-parse HEAD
3a1f... # 64 hex-символа вместо 40 - это и есть SHA-256
3. Дефолтный ref-backend -> reftable. Это самое технически интересное. Классически ссылки (ветки, теги) хранятся как loose-файлы в .git/refs/heads/ плюс упакованный packed-refs. На репозитории с десятками тысяч ссылок это медленно и подвержено гонкам файловой системы. Reftable - бинарный формат (родом из JGit/Google), который даёт атомарные обновления многих ссылок сразу, корректную работу регистра имён на всех ОС и кратно более быстрое чтение: цифры по бенчмаркам - около 22x ускорение fetch и 18x push на репозиториях с 10000+ ссылок. Production-ready с 2.51, дефолт - в 3.0. Включается так:
Код: Выделить всё
$ git init --ref-format=reftable bigrepo
$ ls bigrepo/.git/refs # папок heads/tags нет
ls: .git/refs: No such file or directory
$ ls bigrepo/.git/reftable # ссылки теперь тут, в бинарных таблицах
tables.list 0x000000000001-0x000000000001-<hash>.ref
$ git refs migrate --ref-format=reftable # миграция существующего репо (с 2.46)
Плюс к этому - чистка легаси. Команды git whatchanged и git pack-redundant уже с 2.51 работают только с флагом --i-still-use-this и удаляются в 3.0. Старый git filter-branch официально не рекомендован, печатает варнинг и идёт к удалению - массово переписывать историю надо через filter-repo (сторонний инструмент) или BFG, с обязательной ротацией утёкших секретов после.
Экосистема 2026: jj, GitButler и git инструменты 2026
Вокруг ядра выросли проекты, которые меняют не формат хранения, а способ работать. Главное, что нужно держать в голове: большинство из них - это другой интерфейс поверх тех же git-объектов, а не замена пониманию Git.
Jujutsu (jj). Это Git-совместимый VCS под организацией jj-vcs. Фокус: jj git - и твои коммиты остаются НАСТОЯЩИМИ git-коммитами. Работает в режиме colocated прямо поверх существующего .git - то есть в одной папке у тебя и .jj, и .git, и можно дёргать обе тулзы. Чем jj подкупает в связке "jj git":
- Нет staging area и нет stash - твоя рабочая копия сама по себе всегда является коммитом (working-copy commit), правки фиксируются автоматически. Меньше церемоний "add - commit".
- Мощный undo через operation log: jj op log показывает все операции, jj undo откатывает любую, включая то, что в Git откатить тяжело.
- Удобное переписывание и работа со стеком веток - менять середину истории и автоматически перешивать потомков проще, чем интерактивным rebase.
Код: Выделить всё
$ jj git init --colocate # поверх существующего git-репо
$ jj op log # журнал операций - сюда смотрит undo
@ a1b2c3 user@host 2 minutes ago
| snapshot working copy
o d4e5f6 user@host 5 minutes ago
| initialize repo
$ jj undo # откатить последнюю операцию целиком
GitButler. Десктоп-клиент, CEO которого - Скотт Чакон, автор Pro Git и сооснователь GitHub. В 2026 проект поднял раунд Series A. Главная идея - virtual / stacked branches: ты держишь несколько веток одновременно в одном рабочем дереве и раскидываешь изменения по ним мышкой, без постоянных переключений и stash. Плюс безлимитный undo и интеграция AI-агентов. Удобно, когда ведёшь параллельно несколько фич и хочешь собирать стек PR-ов. Но под капотом это снова обычные git-ветки и коммиты.
TUI и pager: lazygit, gitui, delta. Это не VCS, а интерфейсы.
- lazygit - терминальный UI: stage по строкам, интерактивный rebase, cherry-pick - всё горячими клавишами. Снимает рутину набора команд, но каждая клавиша - это git-команда под капотом.
- gitui - то же по духу, но на Rust, быстрее на больших репозиториях.
- git delta - это pager для дифа: подсветка синтаксиса, нумерация строк, side-by-side. Ставится в один git config:
Код: Выделить всё
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
line-numbers = true
- "У меня вдруг main вместо master". Это не баг, а твой же init.defaultBranch или новый дефолт инструмента. Проверь git config --global init.defaultBranch и согласуй имя с удалённым репозиторием, иначе push уйдёт не в ту ветку.
- Перевёл репо на SHA-256, а хостинг не принял. Сначала проверяй поддержку на стороне сервера. SHA-256 и SHA-1 репозитории - это пока разные миры, бесшовный интероп ещё докручивают.
- Считать jj и GitButler "заменой Git". Они пишут те же объекты в тот же .git. Сломаешь представление о коммитах и ветках - сломаешься и там. Инструмент ускоряет того, кто понимает; новичку без базы он маскирует, а не убирает сложность.
- filter-branch по привычке. Он даёт варнинг не зря. Бери filter-repo, а после любого переписывания истории - ротация утёкших секретов и push с --force-with-lease, не голый --force.
- reftable migrate на проде без бэкапа. Формат хранения ссылок меняется на диске. Сделай копию .git или проверь на клоне.
Повтори по шагам, на тестовых папках, ничего из этого не трогает твои рабочие репозитории.
- Шаг 1. Включи дефолт будущего: git config --global init.defaultBranch main. Создай git init lab-main, проверь git symbolic-ref HEAD - там refs/heads/main.
- Шаг 2. Создай SHA-256 репозиторий: git init --object-format=sha256 lab-sha256, сделай пустой коммит, посмотри git rev-parse HEAD - убедись, что хеш длиной 64 символа.
- Шаг 3. Создай reftable-репозиторий: git init --ref-format=reftable lab-reftable. Загляни внутрь: в .git нет папки refs/heads, зато есть .git/reftable. Сделай пару коммитов и веток, убедись, что git branch их видит как обычно.
- Шаг 4. Если есть возможность - поставь delta и lazygit, включи delta как pager, посмотри git diff с подсветкой. Открой lazygit в любом репозитории и застейдж одну строку клавишей space.
- Шаг 5. По желанию: поставь jj, выполни jj git init --colocate в копии тестового репо, сделай правку, посмотри jj op log и откати её через jj undo.
- 1. Какие четыре дефолта меняет Git 3.0 и почему эти изменения попали именно в мажорный релиз, а не в минорный?
- 2. В чём практическая выгода reftable перед классическим хранением ссылок и на каких репозиториях она заметна?
- 3. Почему про коммиты jujutsu говорят, что они "настоящие git-коммиты", и что значит colocated?
- 4. Чем lazygit и delta принципиально отличаются от jj и GitButler по своей роли в стеке инструментов?
Git 3.0 не выбрасывает то, что ты выучил - он закрепляет здравые дефолты: main, SHA-256, reftable, плюс чистка легаси и Rust в сборке. Линия 2.5x уже даёт всё это как опции, так что включай заранее и привыкай. Экосистема - jujutsu, GitButler, lazygit, gitui, delta - это удобные интерфейсы и идеи поверх тех же git-объектов. Они ускоряют того, кто понимает механику, и ничего из этого не отменяет знание коммитов, деревьев и ссылок, которое ты собрал за курс. Карта у тебя есть - дальше выбираешь инструмент под задачу, а не по хайпу.