Не паникуй, это всего лишь 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.

Переименование удалённой ветки
Чтобы переименовать ветку, которая уже существует на удалённом репозитории:
  1. git switch <старое_название_ветки> Переключитесь на ветку, которую вы хотите переименовать.
  2. git branch -m <старое_название_ветки> <новое_название_ветки> Переименуйте локальную ветку.
  3. git push origin :<старое_название_ветки> Удалите старую ветку из удалённого репозитория.
  4. git push origin -u <новое_название_ветки> Загрузите новую локальную ветку в удалённый репозиторий и установите её как upstream.

Субмодули (Submodules)
Субмодули позволяют встраивать один репозиторий Git внутрь другого. Это полезно для управления зависимостями проекта, когда часть проекта является отдельным репозиторием.
  • git submodule add <URL> [<путь>] Добавляет репозиторий с указанным URL как субмодуль в текущий репозиторий по указанному пути. Git сохранит ссылку на конкретный коммит субмодуля.
  • git pull --recurse-submodules Выполняет git pull для основного проекта, а затем для всех его субмодулей.
  • Инициализация и обновление субмодулей в склонированном репозитории:
  1. git submodule init Инициализирует локальную конфигурацию субмодулей, считывая данные из файла .gitmodules.
  2. git submodule update Загружает данные субмодулей и переключает их на те коммиты, на которые указывает родительский репозиторий.
  • Для добавления изменений в субмодуль (из каталога субмодуля):
  1. Перейдите в директорию субмодуля.
  2. Внесите необходимые изменения.
  3. git add . Добавьте изменения субмодуля.
  4. git commit -m "Комментарий" Зафиксируйте изменения в субмодуле.
  5. git push Загрузите изменения субмодуля в его собственный удалённый репозиторий.
  6. Вернитесь в корневую директорию основного репозитория.
  7. git add <путь_к_субмодулю> Git увидит, что ссылка на субмодуль изменилась (потому что изменился коммит, на который он указывает).
  8. git commit -m "Обновлен субмодуль: <название_субмодуля>" Зафиксируйте изменение ссылки на субмодуль в основном репозитории.
  9. 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> Показывает различия между двумя указанными коммитами.

 

Поделиться: