🧪 Git Filter-Repo — переписывание истории правильно
git filter-repo — современная замена filter-branch. Используется для очистки истории: удаление файлов, директорий, секретов.
Удалить файл из всей истории:
Удалить директорию:
Заменить e-mail автора:
Важно:
• полностью переписывает историю;
• после — force push;
• использовать осознанно.
filter-repo — хирургия истории без костылей.
➡️ GitHub Ready | #урок
git filter-repo — современная замена filter-branch. Используется для очистки истории: удаление файлов, директорий, секретов.
Удалить файл из всей истории:
git filter-repo --path config.env --invert-paths
Удалить директорию:
git filter-repo --path build/ --invert-paths
Заменить e-mail автора:
git filter-repo --email-callback '
return b"user@old.com" == email and b"user@new.com" or email
'
Важно:
• полностью переписывает историю;
• после — force push;
• использовать осознанно.
filter-repo — хирургия истории без костылей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📦 Git Bundle — перенос репозитория без интернета
git bundle упаковывает историю репозитория в один файл. Подходит для передачи кода офлайн или через закрытые контуры.
Создать bundle:
Создать bundle с одной веткой:
Проверить содержимое:
Клонировать из bundle:
Использование:
• офлайн-передача;
• air-gapped среды;
• быстрый бэкап истории.
git bundle — репозиторий в одном файле.
➡️ GitHub Ready | #урок
git bundle упаковывает историю репозитория в один файл. Подходит для передачи кода офлайн или через закрытые контуры.
Создать bundle:
git bundle create repo.bundle --all
Создать bundle с одной веткой:
git bundle create feature.bundle feature/login
Проверить содержимое:
git bundle list-heads repo.bundle
Клонировать из bundle:
git clone repo.bundle project
Использование:
• офлайн-передача;
• air-gapped среды;
• быстрый бэкап истории.
git bundle — репозиторий в одном файле.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧩 Git Merge — как использовать --no-ff и зачем он нужен
По умолчанию, если ветка может быть слита без конфликта, Git делает fast-forward — история остаётся линейной. Но иногда нужен merge-коммит для ясности.
Пример:
Что происходит:
• создаётся отдельный коммит слияния;
• сохраняется факт объединения ветки;
• история ветки видна в графе.
Когда использовать:
• длинные фичи;
• командная работа;
• подготовка к релизу.
--no-ff — контроль структуры истории без потери изменений.
➡️ GitHub Ready | #урок
По умолчанию, если ветка может быть слита без конфликта, Git делает fast-forward — история остаётся линейной. Но иногда нужен merge-коммит для ясности.
Пример:
git merge --no-ff feature/login
Что происходит:
• создаётся отдельный коммит слияния;
• сохраняется факт объединения ветки;
• история ветки видна в графе.
Когда использовать:
• длинные фичи;
• командная работа;
• подготовка к релизу.
--no-ff — контроль структуры истории без потери изменений.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
📡 Git Remote — управление удалёнными репозиториями
Посмотреть текущие remote:
Добавить новый:
Переименовать:
Удалить:
Зачем это нужно:
* работа с fork + upstream;
* миграция репозитория;
* контроль источников кода.
➡️ GitHub Ready | #урок
git remote отвечает за подключённые удалённые репозитории и их адреса.Посмотреть текущие remote:
git remote -v
Добавить новый:
git remote add upstream https://github.com/org/project.git
Переименовать:
git remote rename origin old-origin
Удалить:
git remote remove upstream
Зачем это нужно:
* работа с fork + upstream;
* миграция репозитория;
* контроль источников кода.
git remote — карта связей между репозиториями.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🤝1
🧠 Git Index (Staging Area) — скрытый слой между кодом и коммитом
Index — это промежуточное состояние между рабочей директорией и коммитом. Git коммитит не файлы, а именно содержимое index.
Добавление в index:
Проверка состояния:
Убрать файл из index, не трогая код:
Частичное добавление:
Зачем нужен index:
• точечные коммиты;
• контроль содержимого;
• чистая история.
Index — причина, почему Git мощнее простых VCS.
➡️ GitHub Ready | #урок
Index — это промежуточное состояние между рабочей директорией и коммитом. Git коммитит не файлы, а именно содержимое index.
Добавление в index:
git add file.js
Проверка состояния:
git status
Убрать файл из index, не трогая код:
git restore --staged file.js
Частичное добавление:
git add -p
Зачем нужен index:
• точечные коммиты;
• контроль содержимого;
• чистая история.
Index — причина, почему Git мощнее простых VCS.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🧯 git pull --rebase --autostash — обновление без ручного stash
При rebase Git обычно требует чистую рабочую директорию. Флаг --autostash решает это автоматически.
Использование:
Что происходит:
• текущие изменения временно сохраняются;
• выполняется fetch + rebase;
• изменения автоматически возвращаются обратно.
Полезно, когда:
• есть незакоммиченные правки;
• нужно быстро подтянуть remote;
• не хочется вручную делать stash.
Можно включить по умолчанию:
autostash — меньше ручных шагов, меньше ошибок.
➡️ GitHub Ready | #урок
При rebase Git обычно требует чистую рабочую директорию. Флаг --autostash решает это автоматически.
Использование:
git pull --rebase --autostash
Что происходит:
• текущие изменения временно сохраняются;
• выполняется fetch + rebase;
• изменения автоматически возвращаются обратно.
Полезно, когда:
• есть незакоммиченные правки;
• нужно быстро подтянуть remote;
• не хочется вручную делать stash.
Можно включить по умолчанию:
git config --global rebase.autoStash true
autostash — меньше ручных шагов, меньше ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧪 Git Restore — возврат файлов без влияния на историю
Откат файла из рабочей директории:
Убрать файл из index:
Вернуть файл из другого коммита:
Почему это важно:
* замена опасных
* точечный контроль;
* безопасный откат.
➡️ GitHub Ready | #урок
git restore используется для отката изменений в файлах и индексе, не трогая коммиты и ветки.Откат файла из рабочей директории:
git restore file.js
Убрать файл из index:
git restore --staged file.js
Вернуть файл из другого коммита:
git restore --source=HEAD~1 file.js
Почему это важно:
* замена опасных
checkout;* точечный контроль;
* безопасный откат.
git restore — инструмент аккуратной работы с изменениями.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥1
🔍 Git Log — удобные фильтры для истории коммитов
git log позволяет не просто смотреть коммиты, а фильтровать их по автору, дате, сообщению и файлам.
Примеры:
• Коммиты конкретного автора:
• Коммиты за последние 7 дней:
• По ключевому слову в сообщении:
• История конкретного файла:
💡 Фильтры помогают быстро найти нужный коммит без просмотра всей истории.
➡️ GitHub Ready | #урок
git log позволяет не просто смотреть коммиты, а фильтровать их по автору, дате, сообщению и файлам.
Примеры:
• Коммиты конкретного автора:
git log --author="Nadir"
• Коммиты за последние 7 дней:
git log --since="7 days ago"
• По ключевому слову в сообщении:
git log --grep="fix login"
• История конкретного файла:
git log -- path/to/file.js
💡 Фильтры помогают быстро найти нужный коммит без просмотра всей истории.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧵 Git Patch — перенос изменений без merge и cherry-pick
git patch позволяет переносить изменения между репозиториями или ветками в виде файлов-патчей.
Создать патч из последнего коммита:
Создать патчи для диапазона коммитов:
Применить патч:
Или с созданием коммита:
Когда это используют:
• код-ревью по почте;
• перенос правок без доступа к remote;
• изоляция изменений.
Patch — перенос кода без привязки к репозиторию.
➡️ GitHub Ready | #урок
git patch позволяет переносить изменения между репозиториями или ветками в виде файлов-патчей.
Создать патч из последнего коммита:
git format-patch -1 HEAD
Создать патчи для диапазона коммитов:
git format-patch main..feature
Применить патч:
git apply fix.patch
Или с созданием коммита:
git am fix.patch
Когда это используют:
• код-ревью по почте;
• перенос правок без доступа к remote;
• изоляция изменений.
Patch — перенос кода без привязки к репозиторию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🧭 Git HEAD~ и ^ — навигация по истории коммитов
Git позволяет ссылаться на коммиты относительно текущего положения, без копирования hash.
Примеры:
Оператор ^:
Комбинации:
Полезно для:
• reset / checkout;
• revert;
• анализа истории без git log.
Относительные ссылки — быстрый способ перемещаться по истории Git.
➡️ GitHub Ready | #урок
Git позволяет ссылаться на коммиты относительно текущего положения, без копирования hash.
Примеры:
HEAD~1 # предыдущий коммит
HEAD~3 # три коммита назад
Оператор ^:
HEAD^ # первый родитель
HEAD^2 # второй родитель (при merge)
Комбинации:
HEAD~2^
Полезно для:
• reset / checkout;
• revert;
• анализа истории без git log.
Относительные ссылки — быстрый способ перемещаться по истории Git.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
📌 Git Assume-Unchanged vs Skip-Worktree — временно игнорировать изменения
Эти флаги говорят Git не обращать внимания на локальные изменения, но делают это по-разному.
Assume-unchanged
* Git перестаёт проверять изменения файла;
* используется для ускорения
* небезопасен при активной разработке.
Skip-worktree
* файл считается «не для изменений»;
* безопаснее для локальных конфигов;
* часто применяют для
Сброс флагов:
Важно:
* не замена
* не коммитится;
* действует только локально.
Эти флаги — для тонкого локального контроля, а не для команды.
➡️ GitHub Ready | #урок
Эти флаги говорят Git не обращать внимания на локальные изменения, но делают это по-разному.
Assume-unchanged
git update-index --assume-unchanged config.yml
* Git перестаёт проверять изменения файла;
* используется для ускорения
status;* небезопасен при активной разработке.
Skip-worktree
git update-index --skip-worktree config.yml
* файл считается «не для изменений»;
* безопаснее для локальных конфигов;
* часто применяют для
*.env.Сброс флагов:
git update-index --no-assume-unchanged config.yml
git update-index --no-skip-worktree config.yml
Важно:
* не замена
.gitignore;* не коммитится;
* действует только локально.
Эти флаги — для тонкого локального контроля, а не для команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🧩 Git Shortlog — краткая статистика по коммитам
Базовое использование:
Список авторов с количеством коммитов:
*
*
Фильтр по ветке или диапазону:
Когда полезно:
* отчёт для менеджеров;
* подготовка релизного отчёта;
* обзор активности команды.
➡️ GitHub Ready | #урок
git shortlog показывает, кто и сколько коммитов сделал, удобно для отчётов и обзора вклада команды.Базовое использование:
git shortlog
Список авторов с количеством коммитов:
git shortlog -s -n
*
-s — только числа;*
-n — сортировка по количеству коммитов.Фильтр по ветке или диапазону:
git shortlog main..feature
Когда полезно:
* отчёт для менеджеров;
* подготовка релизного отчёта;
* обзор активности команды.
shortlog — быстрый взгляд на вклад каждого разработчика.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
🧾 .git-blame-ignore-revs — чтобы blame был полезным
Иногда git blame показывает коммиты с форматированием или рефакторингом, которые не несут смысла. Это можно исключить.
Создай файл:
Добавь hash-коммиты, которые нужно игнорировать:
Включи настройку:
Что это даёт:
• blame показывает реальные изменения логики;
• форматирование не шумит;
• проще искать причины багов.
.git-blame-ignore-revs - чистый blame без мусора.
➡️ GitHub Ready | #урок
Иногда git blame показывает коммиты с форматированием или рефакторингом, которые не несут смысла. Это можно исключить.
Создай файл:
.git-blame-ignore-revs
Добавь hash-коммиты, которые нужно игнорировать:
a1b2c3d4
e5f6g7h8
Включи настройку:
git config blame.ignoreRevsFile .git-blame-ignore-revs
Что это даёт:
• blame показывает реальные изменения логики;
• форматирование не шумит;
• проще искать причины багов.
.git-blame-ignore-revs - чистый blame без мусора.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🧠 Git Rev-Parse — как Git понимает ссылки на коммиты
Получить hash текущего коммита:
Hash ветки:
Проверка, существует ли ссылка:
Определить имя текущей ветки:
Зачем использовать:
* shell-скрипты и CI;
* диагностика сложных кейсов;
* понимание, как Git резолвит ссылки.
➡️ GitHub Ready | #урок
git rev-parse показывает, во что Git реально преобразует ссылки вроде HEAD, веток и тегов. Полезно для скриптов и отладки.Получить hash текущего коммита:
git rev-parse HEAD
Hash ветки:
git rev-parse main
Проверка, существует ли ссылка:
git rev-parse --verify feature/login
Определить имя текущей ветки:
git rev-parse --abbrev-ref HEAD
Зачем использовать:
* shell-скрипты и CI;
* диагностика сложных кейсов;
* понимание, как Git резолвит ссылки.
rev-parse — взгляд на Git без абстракций.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🛠 Git Worktree Prune — чистим старые рабочие копии
При использовании
Проверка списка:
Очистка несуществующих директорий:
Что делает:
* удаляет записи о недоступных worktree;
* не трогает существующие рабочие каталоги;
* упрощает управление несколькими рабочими копиями.
➡️ GitHub Ready | #урок
При использовании
git worktree иногда остаются неактуальные директории. prune помогает убрать ссылки на удалённые или удалённые worktree.Проверка списка:
git worktree list
Очистка несуществующих директорий:
git worktree prune
Что делает:
* удаляет записи о недоступных worktree;
* не трогает существующие рабочие каталоги;
* упрощает управление несколькими рабочими копиями.
worktree prune — поддержка порядка при множестве рабочих деревьев.Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧪 Git Rerere — повторное использование решений конфликтов
Включение:
Проверить сохранённые решения:
Очистить базу решений:
Где полезно:
* частые rebase;
* долгоживущие ветки;
* повторяющиеся конфликты.
➡️ GitHub Ready | #урок
git rerere сохраняет твои решения конфликтов и автоматически применяет их при повторных конфликтах.Включение:
git config --global rerere.enabled true
Проверить сохранённые решения:
git rerere status
Очистить базу решений:
git rerere clear
Где полезно:
* частые rebase;
* долгоживущие ветки;
* повторяющиеся конфликты.
rerere — инструмент для тех, кто устал решать одно и то же.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
📊 Git Count-Objects — что происходит внутри .git
Базовое использование:
Более подробная информация:
Что можно увидеть:
* количество loose-объектов;
* размер pack-файлов;
* общий объём данных.
Когда полезно:
* репозиторий резко вырос;
* диагностика после переписывания истории;
* проверка перед
➡️ GitHub Ready | #урок
git count-objects показывает статистику объектов в репозитории и помогает понять его размер и состояние.Базовое использование:
git count-objects
Более подробная информация:
git count-objects -v
Что можно увидеть:
* количество loose-объектов;
* размер pack-файлов;
* общий объём данных.
Когда полезно:
* репозиторий резко вырос;
* диагностика после переписывания истории;
* проверка перед
git gc.count-objects — быстрый способ понять, что происходит внутри Git.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🧬 Git Replace — временная подмена коммита без переписывания истории
Создать замену:
Посмотреть активные замены:
Удалить замену:
Что это даёт:
* тестирование альтернативной истории;
* анализ изменений без force push;
* эксперименты с графом коммитов.
Важно:
* замены действуют локально;
* не отправляются в remote по умолчанию;
* это инструмент для продвинутой диагностики.
➡️ GitHub Ready | #урок
git replace позволяет подменить один объект Git другим. История физически не меняется, но Git будет показывать её с учётом замены.Создать замену:
git replace <old_commit> <new_commit>
Посмотреть активные замены:
git replace
Удалить замену:
git replace -d <old_commit>
Что это даёт:
* тестирование альтернативной истории;
* анализ изменений без force push;
* эксперименты с графом коммитов.
Важно:
* замены действуют локально;
* не отправляются в remote по умолчанию;
* это инструмент для продвинутой диагностики.
git replace — вмешательство в отображение истории без её разрушения.Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🧠 Git Show-Ref — список всех ссылок в репозитории
Базовое использование:
Только ветки:
Только теги:
Проверка существования ветки:
Когда полезно:
* диагностика «пропавшей» ветки;
* скрипты и CI;
* проверка ref перед операциями.
➡️ GitHub Ready | #урок
git show-ref выводит все ссылки: ветки, теги и другие ref-объекты с их hash.Базовое использование:
git show-ref
Только ветки:
git show-ref --heads
Только теги:
git show-ref --tags
Проверка существования ветки:
git show-ref --verify refs/heads/feature/login
Когда полезно:
* диагностика «пропавшей» ветки;
* скрипты и CI;
* проверка ref перед операциями.
show-ref — прямой доступ к карте ссылок Git.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔐 Git Update-Ref — управление ссылками вручную
Создать ветку:
Переместить ветку:
Удалить ref:
Особенности:
* не делает merge или проверок;
* напрямую меняет указатели;
* используется в скриптах и внутренних механизмах Git.
➡️ GitHub Ready | #мемы
git update-ref позволяет напрямую изменить, создать или удалить ref (ветку, тег). Это низкоуровневый инструмент.Создать ветку:
git update-ref refs/heads/feature/login <hash>
Переместить ветку:
git update-ref refs/heads/main <hash>
Удалить ref:
git update-ref -d refs/heads/old-feature
Особенности:
* не делает merge или проверок;
* напрямую меняет указатели;
* используется в скриптах и внутренних механизмах Git.
update-ref — контроль над ссылками без посредников.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2