Шпаргалка по Git

Источник: «Git Cheatsheet»
Все, что вам нужно знать, в одной удобной шпаргалке

Git — это система контроля версий, позволяющая отслеживать изменения в файлах и папках. Это мощный инструмент, который можно использовать для любых задач — от небольших личных проектов до масштабных корпоративных приложений.

Это руководство представляет собой краткое описание наиболее распространённых команд Git. Оно не претендует на роль исчерпывающего руководства по Git, а скорее является кратким справочником по наиболее распространённым командам.

Вот пересмотренная шпаргалка по git с улучшенными названиями разделов и реорганизацией:

Установка и конфигурирование

# Инициализация нового репозитория Git
git init
# Клонирование и создание локальной копии удалённого репозитория
git clone <url>
# Настройте глобальные параметры Git
git config --global <имя_параметра> <значение>
# Настройка локальных параметров Git для конкретного репозитория
git config --local <имя_параметра> <значение>

# --------------- Расширенные ------------------

# Показать сводку настроек конфигурации Git
git config --list
# Установить пользовательский текстовый редактор для сообщений Git
git config --global core.editor " <команда_редактора>"
# Создать псевдоним команды Git
git config --global alias.<псевдоним> <команда>
# Включить автоматическое окрашивание вывода Git'а
git config --global color.ui auto
# Кэшировать учётные данные Git на определённое время
git config --global credential.helper 'cache --timeout=<секунды>'
# Настроить git на обнаружение определённых типов ошибок пробельных символов
git config --global core.whitespace <опции>
# Автоматически обрезать ветви удалённого отслеживания при получении обновлений
git config --global fetch.prune true
# Установить пользовательский инструмент diff для Git
git config --global diff.tool <инструмент>
# Установить пользовательский инструмент слияния для Git
git config --global merge.tool <инструмент>
# Сравнение изменения с помощью пользовательского инструмента diff
git difftool
# Разрешение конфликтов слияния с помощью пользовательского инструмента слияния
git mergetool

Файловые операции

# Показать состояние рабочего дерева
git status
# Добавить файлы в область хранения
git add <файл(ы)>
# Удалить файлы из рабочего дерева и области хранения
git rm <файл(ы)>
# Переместить или переименовать файл
git mv <старый_файл> <новый_файл>
# Коммит изменений с сообщением
git commit -m "сообщение коммита"
# Показать различия между рабочим деревом и последним коммитом
git diff

# --------------- Расширенные ------------------

# Предположить, что отслеживаемый файл не изменился
git update-index --assume-unchanged <файл>
# Восстановить нормальное поведение отслеживания изменений
git update-index --no-assume-unchanged <файл>
# Показать различия между двумя коммитами
git diff <коммит_id1>..<коммит_id2>
# Удалить файл, но сохранить в рабочем каталоге
git rm --cached <имя_файла>

Ветвление и слияние

# Список всех ветвей
git branch
# Создать новую ветвь
git branch <имя_ветви>
# Переход к определённой ветви
git checkout <имя_ветви>
# Объединить ветвь с текущей ветвью
git merge <имя_ветви>
# Удалить определённую ветвь
git branch -d <имя_ветви>
# Вывести список всех удалённых ветвей
git branch -r

# --------------- Расширенные ------------------

# Список ветвей с дополнительной информацией
git branch -vv
# Создать новую ветвь на основе удалённой ветви
git checkout -b <имя_ветви> <имя_удалённой_ветви>/<имя_удалённой_ветви>
# Отменить слияние в случае конфликтов
git merge --abort
# Перебазировать текущую ветвь на другую ветвь
git rebase <имя_ветви>
# Отменить текущую операцию ребазирования
git rebase --abort
# Интерактивное ребазирование для редактирования, сквоша, переупорядочивания или сброса коммитов
git rebase -i
# Интерактивный возврат коммитов в текущей ветви на удалённую ветвь
git rebase -i <имя_удалённой_ветви>/<удалённая_ветвь>

Удалённые репозитории

# Список удалённых репозиториев
git remote
# Добавить удалённый репозиторий
git remote add <имя> <url>
# Извлечение из удалённого репозитория
git fetch <имя_удалённого_репозитория>
# Извлечь изменения из удалённой ветви
git pull <имя_удалённого_репозитория> <удалённая_ветвь>
# Внести изменения в удалённый репозиторий
git push <имя_удалённого_репозитория> <локальная_ветвь>
# Удалить удалённый репозиторий
git remote rm <имя_удалённого_репозитория>
# Отображение информации о конкретном удалённом репозитории
git remote show <имя_удалённого_репозитория>
# Показать ветви отслеживания для удалённых репозиториев
git remote show <имя удалённого репозитория> --verbose

# --------------- Расширенные -------------------

# Получить обновления из всех удалённых репозиториев
git remote update
# Принудительная отправка изменений в удалённый репозиторий с перезаписью истории удалённого репозитория
git push --force <имя_удалённого_репозитория> <локальная_ветвь>
# Передача всех тегов в удалённый репозиторий
git push --tags <имя_удалённого_репозитория>
# Переименовать удалённый репозиторий
git remote rename <старое_имя> <новое_имя>
# Изменить URL удалённого репозитория
git remote set-url <имя> <новый_url>
# Удалить устаревшие ветви удалённого отслеживания
git remote prune <имя_удалённого_репозитория>
# Перечислить все удалённые ветви, которые были объединены в текущую ветвь
git branch -r --merged
# Список всех удалённых ветвей, которые ещё не объединены в текущую ветвь
git branch -r --no-merged
# Получение обновлений из удалённого репозитория и удаление устаревших ветвей удалённого отслеживания
git fetch -p

# Отслеживание удалённой ветви и настройка локальной ветви на автоматическую синхронизацию с ней
git branch --track <имя_ветви> <имя_удалённого_репозитория>/<имя_удалённой_ветви>
# Установить существующую локальную ветвь для отслеживания удалённой ветви
git branch -u <имя_удалённого_репозитория>/<имя_удалённой_ветви>
# Переместить ветвь в удалённый репозиторий и установить её для отслеживания удалённой ветви
git push -u <имя_удалённого_репозитория> <локальная_ветвь>
# Удалить ассоциацию отслеживания между локальной и удалённой веткой
git branch --unset-upstream <имя_ветви>

История коммитов

# Показать историю коммитов
git log
# Показать сжатую историю коммитов
git log --oneline
# Показать историю коммитов с ветвлением
git log --graph
# Фильтровать историю коммитов по автору
git log --author=<имя_автора>
# Показать историю коммитов с определённой даты
git log --since=<дата>
# Показать историю коммитов до определённой даты
git log --until=<дата>

Тэги

# Список всех тегов
git tag
# Создать новый тег для определённого коммита
git tag <имя_тега> <коммит_id>
# Создать аннотированный тег с сообщением
git tag -a <имя_тега> -m "сообщение тега"
# Удалить определённый тег
git tag -d <имя_тега>
# Удалить определённый удалённый тег
git push <имя_удалённого_репозитория> --delete <имя_тега>
# Показать информацию о конкретном теге
git show <имя_тега>

Тайники/Stashes

# Временно сохраните изменения в рабочем дереве
git stash save "сообщение тайника"
# Перечислить все тайники
git stash list
# Применить изменения из определённого тайника
git stash apply <тайник>
# Удалить определённый тайник
git stash drop <тайник>
# Удалить все тайники
git stash clear

Cherry-Picking

# Применить определённый коммит из одной ветки к другой
git cherry-pick <коммит_id>

Управление коммитами

# Изменить последний коммит
git commit --amend
# Создать новый коммит, который отменяет изменения предыдущего коммита
git revert <коммит_id>
# Отбросить изменения и переместить HEAD в определённый коммит
git reset --hard <коммит_id>
# Переместите HEAD на определённый коммит, но сохраните поэтапные изменения
git reset --soft <коммит_id>
# Показать запись всех изменений, внесённых в локальную голову репозитория
git reflog

Подмодули, поддеревья и расширенные подмодули

# Добавить подмодуль в текущий репозиторий
git submodule add <репозиторий_url> <путь>
# Инициализировать и обновить все подмодули рекурсивно
git submodule update --init --recursive
# Добавить поддерево в текущий репозиторий
git subtree add --prefix=<путь> <репозиторий_url>
# Инициализировать подмодули в репозитории
git submodule init
# Обновить подмодули до последних коммитов
git submodule update
# Выполнить определённую команду в каждом подмодуле
git submodule foreach <команда>
# Снять с регистрации подмодуль
git submodule deinit <путь>

Хуки и автоматизация, а также инструменты Diff и Merge

# Найти каталог hooks в репозитории Git (обычно в .git/hooks/)
git hooks
# Имена сценариев для конкретных хуков, которые могут быть добавлены в каталог hooks
pre-commit, post-commit, pre-push, post-merge и т.д.
# Делаем скрипт хука исполняемым, чтобы обеспечить его срабатывание в случае необходимости
chmod +x <скрипт_хука>

Работа с патчами

# Создать файл патча для определённого коммита
git format-patch <коммит_id>
# Применить патч к текущей ветке
git apply <файл_патча>
# Применить патч с помощью команды "git am" (применить почтовый ящик)
git am <файл_патча>

Совместная работа

# Сгенерировать сводку request-pull с изменениями между двумя коммитами
git request-pull <начальный_коммит> <конечный_коммит> <url>
# Обобщить историю коммитов, перечислив авторов и их вклад
git shortlog
# Список всех файлов, отслеживаемых Git'ом
git ls-files
# Поиск заданного шаблона в файлах, отслеживаемых Git'ом
git grep <шаблон>

Бисекция, отладка и проблемы производительности

# Начать сеанс бисекции, чтобы найти коммит, который ввёл ошибку
git bisect start
# Пометить коммит как "плохой", указывающий на то, что он содержит ошибку
git bisect bad <коммит_id>
# Пометить коммит как "хороший", указывающий на то, что он не содержит ошибку
git bisect good <коммит_id>
# Завершить сеанс биссекции и вернуться к исходной ветке/коммиту
git bisect reset
# Проверить целостность репозитория Git
git fsck
# Запустить сборку мусора для оптимизации производительности репозитория
git gc
# Удаление неотслеживаемых файлов и каталогов (используйте с осторожностью)
git clean -df

Советы и хитрости

# Интерактивный выбор частей (кусков) файлов для добавления
git add -p

# Показать историю коммитов и связанные с ними патчи для определённого файла
git log -p <имя_файла>
# Настройка формата вывода журнала git log
git log --pretty=format:"%h - %an, %ar : %s"
# Найти текст в сообщениях о коммитах (полезно для поиска конкретных изменений)
git log --grep="<текст>"
# Быстрый просмотр изменений в рабочем каталоге с момента последнего коммита
git diff --stat
# Отображение истории ветвей с оформлением, чтобы увидеть, где ветви разделились или объединились
git log --oneline --decorate --graph

# Сохранение изменений в рабочем дереве, включая неотслеживаемые файлы
git stash save -u
# Создание пустого коммита, полезно при тестировании правил защиты ветвей
git commit --allow-empty -m " Сообщение о пустом коммите"

# Настроить пейджер вывода git на выход, если вывод меньше одного экрана, и не очищать экран после отображения
git config --global core.pager 'less -RFX'
# Использовать функцию автокоррекции Git'а для исправления неправильно введённых команд
git config --global help.autocorrect 1
# Список псевдонимов для команд Git'а
git config --get-regexp alias

# Выполнить пробный запуск слияния без реального слияния ветвей
git merge --no-commit --no-ff <имя_ветви>
# Показать древовидное представление структуры репозитория
git ls-tree --name-only -r -t HEAD

Дополнительные материалы

Предыдущая Статья

Хуки жизненного цикла в Laravel

Следующая Статья

Vim: Подсчёт вхождений