GitHub Ready | Git
6.16K subscribers
641 photos
74 videos
1 file
547 links
По всем вопросам: @AdilNow
Download Telegram
🧪 Git Filter-Repo — переписывание истории правильно

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 — хирургия истории без костылей.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📦 Git Bundle — перенос репозитория без интернета

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 — репозиторий в одном файле.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧩 Git Merge — как использовать --no-ff и зачем он нужен

По умолчанию, если ветка может быть слита без конфликта, Git делает fast-forward — история остаётся линейной. Но иногда нужен merge-коммит для ясности.

Пример:

git merge --no-ff feature/login


Что происходит:
• создаётся отдельный коммит слияния;
• сохраняется факт объединения ветки;
• история ветки видна в графе.

Когда использовать:
• длинные фичи;
• командная работа;
• подготовка к релизу.

--no-ff — контроль структуры истории без потери изменений.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
📡 Git Remote — управление удалёнными репозиториями

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 — карта связей между репозиториями.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤝1
🧠 Git Index (Staging Area) — скрытый слой между кодом и коммитом

Index — это промежуточное состояние между рабочей директорией и коммитом. Git коммитит не файлы, а именно содержимое index.

Добавление в index:

git add file.js


Проверка состояния:

git status


Убрать файл из index, не трогая код:

git restore --staged file.js


Частичное добавление:

git add -p


Зачем нужен index:
• точечные коммиты;
• контроль содержимого;
• чистая история.

Index — причина, почему Git мощнее простых VCS.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🧯 git pull --rebase --autostash — обновление без ручного stash

При rebase Git обычно требует чистую рабочую директорию. Флаг --autostash решает это автоматически.

Использование:

git pull --rebase --autostash


Что происходит:
• текущие изменения временно сохраняются;
• выполняется fetch + rebase;
• изменения автоматически возвращаются обратно.

Полезно, когда:
• есть незакоммиченные правки;
• нужно быстро подтянуть remote;
• не хочется вручную делать stash.

Можно включить по умолчанию:

git config --global rebase.autoStash true


autostash — меньше ручных шагов, меньше ошибок.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧪 Git Restore — возврат файлов без влияния на историю

git restore используется для отката изменений в файлах и индексе, не трогая коммиты и ветки.

Откат файла из рабочей директории:

git restore file.js


Убрать файл из index:

git restore --staged file.js


Вернуть файл из другого коммита:

git restore --source=HEAD~1 file.js


Почему это важно:

* замена опасных checkout;
* точечный контроль;
* безопасный откат.

git restore — инструмент аккуратной работы с изменениями.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥1
🔍 Git Log — удобные фильтры для истории коммитов

git log позволяет не просто смотреть коммиты, а фильтровать их по автору, дате, сообщению и файлам.

Примеры:
• Коммиты конкретного автора:

git log --author="Nadir"


• Коммиты за последние 7 дней:

git log --since="7 days ago"


• По ключевому слову в сообщении:

git log --grep="fix login"


• История конкретного файла:

git log -- path/to/file.js


💡 Фильтры помогают быстро найти нужный коммит без просмотра всей истории.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧵 Git Patch — перенос изменений без merge и cherry-pick

git patch позволяет переносить изменения между репозиториями или ветками в виде файлов-патчей.

Создать патч из последнего коммита:

git format-patch -1 HEAD


Создать патчи для диапазона коммитов:

git format-patch main..feature


Применить патч:

git apply fix.patch


Или с созданием коммита:

git am fix.patch


Когда это используют:
• код-ревью по почте;
• перенос правок без доступа к remote;
• изоляция изменений.

Patch — перенос кода без привязки к репозиторию.


➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🧭 Git HEAD~ и ^ — навигация по истории коммитов

Git позволяет ссылаться на коммиты относительно текущего положения, без копирования hash.

Примеры:

HEAD~1   # предыдущий коммит
HEAD~3 # три коммита назад


Оператор ^:

HEAD^    # первый родитель
HEAD^2 # второй родитель (при merge)


Комбинации:

HEAD~2^


Полезно для:
• reset / checkout;
• revert;
• анализа истории без git log.

Относительные ссылки — быстрый способ перемещаться по истории Git.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
📌 Git Assume-Unchanged vs Skip-Worktree — временно игнорировать изменения

Эти флаги говорят 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;
* не коммитится;
* действует только локально.

Эти флаги — для тонкого локального контроля, а не для команды.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🧩 Git Shortlog — краткая статистика по коммитам

git shortlog показывает, кто и сколько коммитов сделал, удобно для отчётов и обзора вклада команды.

Базовое использование:

git shortlog


Список авторов с количеством коммитов:

git shortlog -s -n


* -s — только числа;
* -n — сортировка по количеству коммитов.

Фильтр по ветке или диапазону:

git shortlog main..feature


Когда полезно:

* отчёт для менеджеров;
* подготовка релизного отчёта;
* обзор активности команды.

shortlog — быстрый взгляд на вклад каждого разработчика.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🧾 .git-blame-ignore-revs — чтобы blame был полезным

Иногда git blame показывает коммиты с форматированием или рефакторингом, которые не несут смысла. Это можно исключить.

Создай файл:

.git-blame-ignore-revs


Добавь hash-коммиты, которые нужно игнорировать:

a1b2c3d4
e5f6g7h8


Включи настройку:

git config blame.ignoreRevsFile .git-blame-ignore-revs


Что это даёт:
• blame показывает реальные изменения логики;
• форматирование не шумит;
• проще искать причины багов.

.git-blame-ignore-revs - чистый blame без мусора.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🧠 Git Rev-Parse — как Git понимает ссылки на коммиты

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 без абстракций.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🛠 Git Worktree Prune — чистим старые рабочие копии

При использовании git worktree иногда остаются неактуальные директории. prune помогает убрать ссылки на удалённые или удалённые worktree.

Проверка списка:

git worktree list


Очистка несуществующих директорий:

git worktree prune


Что делает:

* удаляет записи о недоступных worktree;
* не трогает существующие рабочие каталоги;
* упрощает управление несколькими рабочими копиями.

worktree prune — поддержка порядка при множестве рабочих деревьев.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧪 Git Rerere — повторное использование решений конфликтов

git rerere сохраняет твои решения конфликтов и автоматически применяет их при повторных конфликтах.

Включение:

git config --global rerere.enabled true


Проверить сохранённые решения:

git rerere status


Очистить базу решений:

git rerere clear


Где полезно:

* частые rebase;
* долгоживущие ветки;
* повторяющиеся конфликты.

rerere — инструмент для тех, кто устал решать одно и то же.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
4
📊 Git Count-Objects — что происходит внутри .git

git count-objects показывает статистику объектов в репозитории и помогает понять его размер и состояние.

Базовое использование:

git count-objects


Более подробная информация:

git count-objects -v


Что можно увидеть:

* количество loose-объектов;
* размер pack-файлов;
* общий объём данных.

Когда полезно:

* репозиторий резко вырос;
* диагностика после переписывания истории;
* проверка перед git gc.

count-objects — быстрый способ понять, что происходит внутри Git.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🧬 Git Replace — временная подмена коммита без переписывания истории

git replace позволяет подменить один объект Git другим. История физически не меняется, но Git будет показывать её с учётом замены.

Создать замену:

git replace <old_commit> <new_commit>


Посмотреть активные замены:

git replace


Удалить замену:

git replace -d <old_commit>


Что это даёт:

* тестирование альтернативной истории;
* анализ изменений без force push;
* эксперименты с графом коммитов.

Важно:

* замены действуют локально;
* не отправляются в remote по умолчанию;
* это инструмент для продвинутой диагностики.

git replace — вмешательство в отображение истории без её разрушения.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🧠 Git Show-Ref — список всех ссылок в репозитории

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.

➡️ GitHub Ready | #урок
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Айти не щадит никого 😐

➡️ GitHub Ready | #мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19
🔐 Git Update-Ref — управление ссылками вручную

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 — контроль над ссылками без посредников.

➡️ GitHub Ready | #мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
2