Не паникуй, это всего лишь Git
За время работы с git сделал для себя некоторую справку в заметке. Теперь решил выпустить её в свет. Тут содержится список основных команд git в которых у меня возникала потребность. Такой некоторый краткий справочник по основным командам Git.
Во первых конечно же хотелось бы посоветовать официальную книгу:
https://git-scm.com/book/ru/v2
Она весьма самодостаточная, подробная. Можно сказать что текущая статья это кратная выжимка.
Содержание:
Примеры использования
Получить удаленный резпозиторий:
git clone <link.repo.git>
Фиксация изменений в локальном репозитории:
git status
git add --all
git status
git commit -m "comment"
git status
Отправка изменений в удаленный репозиторий
git push
git init
Загрузка изменений из удаленного репозитория
Перед загрузкой все измененные файлы должны быть сброшены или зафиксированные
git pull
Работа с локальным репозиторием
git init
Создаёт новый пустой Git-репозиторий или реинициализирует существующий в текущей директории.git add <файл/каталог>
Добавляет изменения из указанного файла или каталога в staging area (область подготовленных изменений) для следующего коммита.git add .
илиgit add -A
илиgit add --all
Добавляет все изменённые, новые и удалённые файлы в staging area.
git reset <файл/каталог>
Отменяет добавление файла или каталога из staging area, но оставляет изменения в рабочей директории.git reset --hard
Отменяет все изменения в рабочей директории и staging area, приводя их в состояние последнего коммита. Используйте с осторожностью, так как это удаляет все незафиксированные изменения.git commit -m "Сообщение коммита"
Создаёт новую версию (коммит) со всеми изменениями, находящимися в staging area. Сообщение коммита должно кратко описывать внесённые изменения.git gc --aggressive
Запускает «сборщик мусора» Git в агрессивном режиме. Это помогает оптимизировать размер репозитория и ускорить его работу, особенно если он стал очень большим.git rm -r --cached <файл/каталог>
Удаляет файл или каталог из отслеживания Git (из репозитория), но оставляет его в рабочей директории. Это полезно, если вы случайно добавили файл, который должен быть в.gitignore
. После этого файл/каталог нужно добавить в.gitignore
.
Настройка Git
git config user.name
Показывает текущее имя пользователя, используемое для коммитов.
Работа с удалёнными репозиториями
git remote add <название> <URL>
Добавляет новый удалённый репозиторий с указанным названием (частоorigin
) и URL.git push -u <название> <ветка>
Загружает (push) коммиты из вашей локальной ветки в указанную удалённую ветку. Флаг-u
(или--set-upstream
) устанавливает связь между локальной и удалённой веткой, что позволяет в дальнейшем использовать простоgit push
иgit pull
.git push
После настройки upstream (с помощью-u
) или если ветки уже связаны, эта команда загружает ваши коммиты в связанный удалённый репозиторий.git remote rm <название>
Удаляет удалённый репозиторий с указанным названием.git remote -v
Показывает список всех настроенных удалённых репозиториев и их URL (как для fetch, так и для push).
Клонирование репозиториев
git clone <URL> [<путь>]
Клонирует существующий удалённый репозиторий по указанному URL в новую директорию. Если путь не указан, репозиторий будет склонирован в директорию с именем репозитория.git clone --recursive <URL> [<путь>]
Клонирует удалённый репозиторий, а также инициализирует и обновляет все его субмодули.git clone -b <ветка> <удалённый_репозиторий>
Клонирует удалённый репозиторий и сразу же переключается на указанную ветку.git submodule update --init --recursive
Инициализирует и загружает субмодули для уже склонированного репозитория, который содержит субмодули.
Навигация по истории и просмотр статуса
git checkout <хеш_коммита>
Переключает рабочую директорию на состояние указанного коммита. Вы перейдёте в состояние «detached HEAD». Для возврата к ветке используйтеgit switch <название_ветки>
.git log
Показывает историю коммитов текущей ветки.git log --all
Показывает историю коммитов всех веток.git reflog
Показывает историю всех действий, которые изменяли HEAD (например, переключение веток, коммиты, сбросы). Это очень полезно для восстановления потерянных коммитов.git status
Показывает текущее состояние рабочей директории и staging area: какие файлы изменены, какие добавлены в staging, а какие нет.
Управление ветками
git branch <название_ветки>
Создаёт новую локальную ветку с указанным именем.git switch <название_ветки>
Переключается на указанную локальную ветку.git push --set-upstream origin <название_ветки>
Загружает новую локальную ветку в удалённый репозиторий и связывает её с локальной. После этого можно использовать простоgit push
.git branch -d <название_ветки>
Удаляет локальную ветку. Git не позволит удалить ветку, если в ней есть незамерженные изменения.git branch -D <название_ветки>
Принудительно удаляет локальную ветку, даже если в ней есть незамерженные изменения. Используйте с осторожностью.git push origin --delete <название_удалённой_ветки>
Удаляет ветку из удалённого репозитория.
Теги (Tags)
Теги используются для маркировки определённых точек в истории репозитория, например, версий релизов.
git tag <имя_тега>
Создаёт новый легковесный (lightweight) тег на текущем коммите.git push origin <имя_тега>
Отправляет указанный тег в удалённый репозиторий.git push --tags
Отправляет все локальные теги в удалённый репозиторий.
Файлы-пакеты (Bundle files)
Git bundle files позволяют «упаковать» репозиторий или его часть в один файл, который можно легко перенести или передать.
git bundle create repo.bundle HEAD master
Создаёт файлrepo.bundle
, который содержит историю веткиmaster
до текущего состоянияHEAD
.git clone repo.bundle repo
Клонирует репозиторий из файлаrepo.bundle
в новую директориюrepo
. Это аналогgit clone
, но источником служит локальный файл.
Создание «голого» (bare) удалённого репозитория
«Голый» репозиторий не имеет рабочей директории и используется как центральный репозиторий, куда пользователи push-ат свои изменения.
git init --bare <название_репозитория>.git
Создаёт новый пустой «голый» репозиторий. По умолчанию такие репозитории имеют расширение.git
.
Переименование удалённой ветки
Чтобы переименовать ветку, которая уже существует на удалённом репозитории:
git switch <старое_название_ветки>
Переключитесь на ветку, которую вы хотите переименовать.git branch -m <старое_название_ветки> <новое_название_ветки>
Переименуйте локальную ветку.git push origin :<старое_название_ветки>
Удалите старую ветку из удалённого репозитория.git push origin -u <новое_название_ветки>
Загрузите новую локальную ветку в удалённый репозиторий и установите её как upstream.
Субмодули (Submodules)
Субмодули позволяют встраивать один репозиторий Git внутрь другого. Это полезно для управления зависимостями проекта, когда часть проекта является отдельным репозиторием.
git submodule add <URL> [<путь>]
Добавляет репозиторий с указанным URL как субмодуль в текущий репозиторий по указанному пути. Git сохранит ссылку на конкретный коммит субмодуля.git pull --recurse-submodules
Выполняетgit pull
для основного проекта, а затем для всех его субмодулей.- Инициализация и обновление субмодулей в склонированном репозитории:
git submodule init
Инициализирует локальную конфигурацию субмодулей, считывая данные из файла.gitmodules
.git submodule update
Загружает данные субмодулей и переключает их на те коммиты, на которые указывает родительский репозиторий.
- Для добавления изменений в субмодуль (из каталога субмодуля):
- Перейдите в директорию субмодуля.
- Внесите необходимые изменения.
git add .
Добавьте изменения субмодуля.git commit -m "Комментарий"
Зафиксируйте изменения в субмодуле.git push
Загрузите изменения субмодуля в его собственный удалённый репозиторий.- Вернитесь в корневую директорию основного репозитория.
git add <путь_к_субмодулю>
Git увидит, что ссылка на субмодуль изменилась (потому что изменился коммит, на который он указывает).git commit -m "Обновлен субмодуль: <название_субмодуля>"
Зафиксируйте изменение ссылки на субмодуль в основном репозитории.git push
Загрузите изменения основного репозитория.
Отмена изменений
git restore <файл/каталог>
Отменяет изменения в рабочей директории для указанного файла или каталога, возвращая его к состоянию последнего коммита или staging area. Если файл в staging area,git restore --staged <файл>
отменит его из staging, но оставит изменения в рабочей директории.git revert <хеш_коммита>
Создаёт новый коммит, который отменяет изменения, внесённые указанным коммитом. В отличие отgit reset --hard
,git revert
не перезаписывает историю, а добавляет новый коммит, что делает его безопаснее для использования в общих ветках.
Слияние (Merging) и Перебазирование (Rebasing)
git merge <ветка>
Объединяет историю указанной ветки с текущей веткой. Если нет конфликтов, Git выполнит fast-forward слияние или трёхстороннее слияние.git rebase <ветка>
Перемещает или комбинирует последовательность коммитов в новую базовую точку. Это переписывает историю коммитов.git rebase
часто используется для поддержания линейной истории проекта, «пересаживая» коммиты вашей фича-ветки поверх последней версии главной ветки. Используйте с осторожностью в ветках, которые уже были опубликованы.git mergetool
Запускает сконфигурированный инструмент для разрешения конфликтов слияния. Очень полезно, когда Git не может автоматически объединить изменения.
Временное сохранение изменений (Stashing)
git stash
Временно сохраняет все изменённые (но ещё не закомиченные) файлы в «стопку» (stash), очищая рабочую директорию. Полезно, когда нужно быстро переключиться на другую задачу, не коммитя незавершённую работу.git stash list
Показывает список всех сохранённых сташей.git stash apply
Применяет последний сохранённый сташ к рабочей директории, но оставляет его в списке сташей.git stash pop
Применяет последний сохранённый сташ к рабочей директории и удаляет его из списка сташей.git stash drop
Удаляет последний сохранённый сташ из списка без применения.
Просмотр изменений
git diff
Показывает различия между рабочей директорией и staging area.git diff --staged
Показывает различия между staging area и последним коммитом.git diff <коммит1> <коммит2>
Показывает различия между двумя указанными коммитами.