Частые команды Git
Git — это система контроля версий, которая позволяет разработчикам отслеживать изменения в коде и работать совместно над проектами. В этой статье мы рассмотрим основные команды Git и приведем примеры для каждой из них.
git init
Команда git init инициализирует новый репозиторий Git.
git init— инициализация нового репозитория в текущей директории.git init my_project— создание нового репозитория в директорииmy_project.mkdir new_repo && cd new_repo && git init— создание и инициализация нового репозитория.git init --bare— создание "голого" репозитория.git init --template=/path/to/template— инициализация с использованием шаблона.git init --separate-git-dir=/path/to/gitdir— инициализация с отдельной директорией для Git.git init --shared— инициализация общего репозитория.git init --quiet— инициализация без вывода сообщений.git init --initial-branch=main— инициализация с указанием начальной ветки.git init --bare /path/to/repo.git— создание "голого" репозитория в указанной директории.
git clone
Команда git clone копирует существующий репозиторий.
git clone https://github.com/user/repo.git— клонирование репозитория по URL.git clone git@github.com:user/repo.git— клонирование через SSH.git clone /path/to/local/repo— клонирование локального репозитория.git clone https://github.com/user/repo.git my_project— клонирование в указанную директорию.git clone --branch my_branch https://github.com/user/repo.git— клонирование определенной ветки.git clone --depth 1 https://github.com/user/repo.git— клонирование с ограничением глубины истории.git clone --single-branch https://github.com/user/repo.git— клонирование только одной ветки.git clone --recurse-submodules https://github.com/user/repo.git— клонирование с подмодулями.git clone --shallow-submodules https://github.com/user/repo.git— клонирование с неглубокими подмодулями.git clone --template=/path/to/template https://github.com/user/repo.git— клонирование с использованием шаблона.
git add
Команда git add добавляет изменения в индекс (staging area).
git add .— добавление всех изменений в текущей директории.git add file.txt— добавление конкретного файла.git add *.txt— добавление всех файлов с расширением .txt.git add --all— добавление всех изменений в рабочей директории.git add -p— добавление изменений по частям (interactive mode).git add -u— добавление только обновленных файлов.git add -A— добавление всех изменений, включая удаленные файлы.git add -n— просмотр изменений, которые будут добавлены, без их добавления.git add --ignore-errors— игнорирование ошибок при добавлении.git add --force— принудительное добавление игнорируемых файлов.
git commit
Команда git commit сохраняет изменения в репозитории.
git commit -m "Initial commit"— создание коммита с сообщением.git commit -a -m "Update files"— коммит всех изменений с сообщением.git commit --amend— изменение последнего коммита.git commit --amend -m "Updated commit message"— изменение сообщения последнего коммита.git commit --amend --no-edit— изменение последнего коммита без изменения сообщения.git commit -v— создание коммита с выводом изменений.git commit --dry-run— просмотр изменений, которые будут закоммичены, без их коммита.git commit --author="Author Name <email@example.com>"— создание коммита с указанием автора.git commit --date="2023-01-01T12:00:00"— создание коммита с указанием даты.git commit --allow-empty— создание пустого коммита.
git status
Команда git status показывает состояние рабочего каталога и индекса.
git status— отображение текущего состояния.git status -s— краткий вывод состояния.git status --short— краткий вывод состояния (аналогично-s).git status -b— отображение текущей ветки.git status --branch— отображение текущей ветки (аналогично-b).git status --ignored— отображение игнорируемых файлов.git status --untracked-files— отображение неотслеживаемых файлов.git status --show-stash— отображение состояния стэша.git status --porcelain— вывод состояния в машинно-читаемом формате.git status --ignored=matching— отображение игнорируемых файлов, соответствующих шаблону.
git log
Команда git log отображает историю коммитов.
git log— отображение истории коммитов.git log -p— отображение изменений для каждого коммита.git log --stat— отображение статистики изменений.git log --oneline— краткий вывод истории коммитов.git log --graph— отображение графа коммитов.git log --author="Author Name"— фильтрация коммитов по автору.git log --since="2023-01-01"— отображение коммитов с указанной даты.git log --until="2023-01-01"— отображение коммитов до указанной даты.git log --grep="fix"— фильтрация коммитов по ключевому слову.git log --pretty=format:"%h - %an, %ar : %s"— пользовательский формат вывода.
git branch
Команда git branch управляет ветками в репозитории.
git branch— отображение списка веток.git branch new_branch— создание новой ветки.git branch -d old_branch— удаление ветки.git branch -m old_name new_name— переименование ветки.git branch -a— отображение всех веток, включая удаленные.git branch -r— отображение только удаленных веток.git branch --merged— отображение веток, слитых с текущей.git branch --no-merged— отображение веток, не слитых с текущей.git branch --contains commit_hash— отображение веток, содержащих указанный коммит.git branch -vv— отображение веток с информацией о привязке к удаленным веткам.
git checkout
Команда git checkout переключает ветки или восстанавливает файлы в рабочем каталоге.
git checkout branch_name— переключение на указанную ветку.git checkout -b new_branch— создание и переключение на новую ветку.git checkout -- file.txt— восстановление файла из индекса.git checkout commit_hash— переключение на указанный коммит.git checkout HEAD~1— переключение на предыдущий коммит.git checkout -— переключение на предыдущую ветку.git checkout --orphan new_branch— создание новой ветки без истории.git checkout -f— принудительное переключение с потерей несохраненных изменений.git checkout --ours file.txt— разрешение конфликта с использованием нашей версии файла.git checkout --theirs file.txt— разрешение конфликта с использованием их версии файла.
git merge
Команда git merge объединяет изменения из одной ветки в другую.
git merge branch_name— слияние указанной ветки с текущей.git merge --no-ff branch_name— слияние без fast-forward.git merge --squash branch_name— слияние с объединением коммитов.git merge --abort— отмена слияния при конфликте.git merge --no-commit— слияние без автоматического коммита.git merge --strategy=recursive— использование стратегии слияния recursive.git merge --strategy-option=ours— использование нашей версии при конфликте.git merge --log— добавление сообщений коммитов в сообщение слияния.git merge --edit— редактирование сообщения слияния.git merge --progress— отображение прогресса слияния.
git pull
Команда git pull загружает изменения из удаленного репозитория и сливает их с текущей веткой.
git pull— загрузка и слияние изменений из удаленного репозитория.git pull origin main— загрузка и слияние изменений из ветки main удаленного репозитория origin.git pull --rebase— загрузка изменений с ребейзом текущей ветки.git pull --no-commit— загрузка изменений без автоматического коммита.git pull --ff-only— загрузка изменений только с fast-forward.git pull --no-ff— загрузка изменений без fast-forward.git pull --all— загрузка изменений из всех удаленных репозиториев.git pull --tags— загрузка всех тегов из удаленного репозитория.git pull --depth=1— загрузка изменений с ограничением глубины истории.git pull --quiet— загрузка изменений без вывода сообщений.
git push
Команда git push отправляет изменения в удаленный репозиторий.
git push origin main— отправка изменений в ветку main удаленного репозитория origin.git push --force— принудительная отправка изменений.git push --tags— отправка всех тегов в удаленный репозиторий.git push --all— отправка всех веток в удаленный репозиторий.git push origin :branch_name— удаление ветки в удаленном репозитории.git push origin --delete branch_name— удаление ветки в удаленном репозитории (аналогично предыдущей команде).git push --mirror— зеркальная отправка изменений (все ветки, теги и т.д.).git push origin +branch_name— принудительная отправка ветки.git push origin HEAD— отправка текущей ветки в удаленный репозиторий.git push --set-upstream origin new_branch— установка upstream для новой ветки.
git fetch
Команда git fetch загружает изменения из удаленного репозитория, но не сливает их с текущей веткой.
git fetch— загрузка всех изменений из удаленного репозитория.git fetch origin— загрузка изменений из удаленного репозитория origin.git fetch origin main— загрузка изменений из ветки main удаленного репозитория origin.git fetch --all— загрузка изменений из всех удаленных репозиториев.git fetch --tags— загрузка всех тегов из удаленного репозитория.git fetch --prune— удаление веток, которые были удалены в удаленном репозитории.git fetch --depth=1— загрузка изменений с ограничением глубины истории.git fetch --unshallow— загрузка изменений для полного восстановления истории.git fetch --dry-run— просмотр изменений, которые будут загружены, без их загрузки.git fetch origin +refs/heads/*:refs/remotes/origin/*— принудительная загрузка всех веток из удаленного репозитория.
git remote
Команда git remote управляет удаленными репозиториями.
git remote— отображение списка удаленных репозиториев.git remote add origin https://github.com/user/repo.git— добавление удаленного репозитория с именем origin.git remote remove origin— удаление удаленного репозитория с именем origin.git remote rename origin new_origin— переименование удаленного репозитория.git remote set-url origin https://github.com/user/new_repo.git— изменение URL удаленного репозитория.git remote show origin— отображение информации об удаленном репозитории origin.git remote update— обновление информации об удаленных репозиториях.git remote prune origin— удаление удаленных веток, которые были удалены в удаленном репозитории.git remote set-head origin main— установка основной ветки в удаленном репозитории.git remote -v— отображение URL для всех удаленных репозиториев.
git stash
Команда git stash временно сохраняет изменения в рабочей директории.
git stash— сохранение изменений в стэш.git stash save "work in progress"— сохранение изменений с сообщением.git stash pop— восстановление изменений из стэша и удаление их из стэша.git stash apply— восстановление изменений из стэша без удаления их из стэша.git stash list— отображение списка всех сохраненных стэшей.git stash drop— удаление последнего сохраненного стэша.git stash clear— удаление всех сохраненных стэшей.git stash show— отображение изменений в последнем сохраненном стэше.git stash branch new_branch— создание новой ветки с изменениями из стэша.git stash push -m "message"— сохранение изменений в стэш с сообщением.
git rebase
Команда git rebase применяет изменения одной ветки поверх другой.
git rebase main— ребейз текущей ветки на ветку main.git rebase --onto new_base old_base feature— перемещение ветки feature на новую базу new_base.git rebase --interactive HEAD~3— интерактивный ребейз последних трех коммитов.git rebase --skip— пропуск текущего коммита при конфликте.git rebase --continue— продолжение ребейза после разрешения конфликта.git rebase --abort— отмена ребейза и возврат к исходному состоянию.git rebase -i origin/main— интерактивный ребейз на удаленную ветку main.git rebase --autosquash— автоматическое объединение фиксов с основными коммитами.git rebase --no-ff— принудительный ребейз без fast-forward.git rebase --root— ребейз всех коммитов начиная с самого первого.
git revert
Команда git revert создает новый коммит, отменяющий изменения предыдущего коммита.
git revert HEAD— отмена последнего коммита.git revert HEAD~1— отмена предпоследнего коммита.git revert -n HEAD— отмена последнего коммита без создания нового коммита.git revert --no-commit HEAD— отмена последнего коммита без создания нового коммита.git revert -m 1 HEAD— отмена коммита слияния.git revert --edit HEAD— отмена последнего коммита с редактированием сообщения.git revert --no-edit HEAD— отмена последнего коммита без редактирования сообщения.git revert --continue— продолжение процесса отмены после разрешения конфликта.git revert --abort— отмена процесса отмены коммита.git revert --signoff HEAD— отмена последнего коммита с добавлением подписи автора.
git reset
Команда git reset перемещает указатель текущей ветки и, опционально, изменяет содержимое рабочей директории.
git reset --soft HEAD~1— перемещение указателя ветки на один коммит назад, без изменения рабочей директории.git reset --hard HEAD~1— перемещение указателя ветки на один коммит назад с изменением рабочей директории.git reset HEAD file.txt— удаление файла из индекса.git reset --mixed— перемещение указателя ветки и изменение индекса, но без изменения рабочей директории.git reset --merge— перемещение указателя ветки и изменение индекса и рабочей директории при слиянии.git reset --keep— перемещение указателя ветки без изменения индекса и рабочей директории.git reset --hard origin/main— синхронизация текущей ветки с удаленной веткой main с изменением рабочей директории.git reset --soft origin/main— синхронизация текущей ветки с удаленной веткой main без изменения рабочей директории.git reset --mixed origin/main— синхронизация текущей ветки с удаленной веткой main с изменением индекса, но без изменения рабочей директории.git reset --patch— интерактивное перемещение указателя ветки с выбором изменений.
git config
Команда git config используется для настройки параметров Git.
git config --global user.name "Your Name"— установка имени пользователя для всех репозиториев.git config --global user.email "your.email@example.com"— установка email пользователя для всех репозиториев.git config --list— отображение всех настроек Git.git config --global core.editor "code --wait"— установка редактора по умолчанию.git config --global alias.co checkout— создание алиаса для команды checkout.git config --system core.autocrlf true— установка настройки перевода строк для всей системы.git config --global core.pager "less -F -X"— настройка постраничного вывода.git config --local user.name "Local User"— установка имени пользователя для текущего репозитория.git config --unset user.name— удаление настройки имени пользователя.git config --global core.excludesfile ~/.gitignore— установка глобального файла .gitignore.
git tag
Команда git tag используется для создания, отображения и удаления тегов.
git tag— отображение всех тегов.git tag -l "v1.*"— отображение тегов по шаблону.git tag -a v1.0 -m "Version 1.0"— создание аннотированного тега.git tag v1.0— создание легкого тега.git tag -d v1.0— удаление тега.git push origin v1.0— отправка тега в удаленный репозиторий.git push origin --tags— отправка всех тегов в удаленный репозиторий.git show v1.0— отображение информации о теге.git checkout v1.0— переключение на указанный тег.git tag -f v1.0— принудительное обновление тега.
git bisect
Команда git bisect используется для поиска коммита, который ввел ошибку.
git bisect start— начало бисекта.git bisect bad— обозначение текущего коммита как плохого.git bisect good commit_hash— обозначение указанного коммита как хорошего.git bisect reset— завершение бисекта и возврат к исходному состоянию.git bisect run script.sh— автоматический поиск плохого коммита с помощью скрипта.git bisect skip— пропуск текущего коммита.git bisect log— отображение лога бисекта.git bisect visualize— отображение графа бисекта.git bisect replay log_file— воспроизведение лога бисекта.git bisect start HEAD~10 HEAD~20— начало бисекта с указанием диапазона коммитов.
git cherry-pick
Команда git cherry-pick применяется для выбора и применения отдельных коммитов.
git cherry-pick commit_hash— применение указанного коммита.git cherry-pick commit1_hash commit2_hash— применение нескольких коммитов.git cherry-pick --edit commit_hash— применение коммита с редактированием сообщения.git cherry-pick --no-commit commit_hash— применение коммита без создания нового коммита.git cherry-pick --signoff commit_hash— применение коммита с добавлением подписи автора.git cherry-pick --strategy=recursive commit_hash— применение коммита с использованием стратегии слияния recursive.git cherry-pick --quit— завершение процесса cherry-pick.git cherry-pick --abort— отмена процесса cherry-pick.git cherry-pick -x commit_hash— применение коммита с добавлением ссылки на оригинальный коммит.git cherry-pick -n commit_hash— применение коммита без автоматического добавления изменений в индекс.
git reflog
Команда git reflog отображает историю ссылок на коммиты.
git reflog— отображение истории ссылок.git reflog show HEAD— отображение истории для указателя HEAD.git reflog show branch_name— отображение истории для указанной ветки.git reflog expire --all --expire=now— немедленное удаление всех старых записей из reflog.git reflog delete refs/heads/branch_name@{1}— удаление конкретной записи из reflog.git reflog --date=iso— отображение истории с датами в формате ISO.git reflog --pretty=oneline— краткий вывод истории.git reflog --graph— отображение графа истории.git reflog --all— отображение истории для всех ссылок.git reflog -n 5— отображение последних пяти записей в reflog.
git blame
Команда git blame показывает, кто последний изменил каждую строку в файле.
git blame file.txt— отображение информации о последнем изменении каждой строки в файле.git blame -L 10,20 file.txt— отображение информации о последних изменениях строк с 10 по 20.git blame --date=short file.txt— отображение дат в кратком формате.git blame --show-name file.txt— отображение имен файлов вместе с изменениями.git blame --incremental file.txt— инкрементальный вывод информации.git blame -C file.txt— отображение изменений с учетом перемещений и копирований файлов.git blame -w file.txt— игнорирование пробелов при отображении изменений.git blame --reverse file.txt— отображение изменений в обратном порядке.git blame --color-lines file.txt— выделение измененных строк цветом.git blame --line-porcelain file.txt— подробный вывод информации о каждой строке.
git archive
Команда git archive создает архив из содержимого репозитория.
git archive --format=zip HEAD -o archive.zip— создание архива в формате zip.git archive --format=tar HEAD -o archive.tar— создание архива в формате tar.git archive --output=archive.tar.gz HEAD— создание архива и сжатие его в формате tar.gz.git archive --prefix=project/ HEAD -o archive.zip— добавление префикса ко всем файлам в архиве.git archive --worktree-attributes HEAD— использование атрибутов рабочего дерева при создании архива.git archive --format=zip main -o main.zip— создание архива для ветки main.git archive --list HEAD— отображение списка файлов, которые будут включены в архив.git archive --remote=ssh://example.com/repo.git HEAD— создание архива из удаленного репозитория.git archive --output=archive.tar --prefix=repo/ HEAD— создание архива с указанием префикса для всех файлов.git archive --format=zip --output=archive.zip v1.0— создание архива для тега v1.0.
git submodule
Команда git submodule управляет подмодулями в репозитории.
git submodule add https://github.com/user/repo.git— добавление подмодуля.git submodule init— инициализация подмодулей.git submodule update— обновление подмодулей до последней версии.git submodule status— отображение статуса подмодулей.git submodule deinit -f --all— удаление всех подмодулей.git submodule sync— синхронизация URL подмодулей с конфигурацией.git submodule foreach git pull origin main— выполнение команды для всех подмодулей.git submodule update --init --recursive— инициализация и обновление всех подмодулей рекурсивно.git submodule update --remote— обновление подмодулей до последней версии в удаленном репозитории.git submodule add -b main https://github.com/user/repo.git— добавление подмодуля с указанием ветки.
git gc
Команда git gc запускает сборку мусора для оптимизации репозитория.
git gc— запуск сборки мусора.git gc --aggressive— запуск агрессивной сборки мусора для максимальной оптимизации.git gc --prune=now— удаление всех объектов, которые больше не используются.git gc --auto— автоматическая сборка мусора при необходимости.git gc --quiet— запуск сборки мусора без вывода сообщений.git gc --force— принудительный запуск сборки мусора, даже если репозиторий в процессе изменения.git gc --prune=all— удаление всех объектов, которые больше не используются, без ограничений по времени.git gc --no-prune— запуск сборки мусора без удаления объектов.git gc --aggressive --prune=all— запуск агрессивной сборки мусора с удалением всех неиспользуемых объектов.git gc --no-reflog-expire— запуск сборки мусора без удаления старых записей из reflog.
git mv
Команда git mv перемещает или переименовывает файл, а затем добавляет это изменение в индекс.
git mv old_name.txt new_name.txt— переименование файла.git mv file.txt new_directory/— перемещение файла в новую директорию.git mv -k old_name.txt new_name.txt— переименование файла, игнорируя ошибки.git mv --force old_name.txt new_name.txt— принудительное переименование файла.git mv old_directory/ new_directory/— перемещение директории.git mv -v old_name.txt new_name.txt— переименование файла с выводом информации о процессе.git mv --dry-run old_name.txt new_name.txt— просмотр переименования файла без его фактического переименования.git mv --force --dry-run old_name.txt new_name.txt— принудительное переименование файла с просмотром изменений.git mv file1.txt file2.txt new_directory/— перемещение нескольких файлов в новую директорию.git mv old_name new_name && git add new_name && git commit -m "Renamed file"— переименование файла и коммит изменений.
git rm
Команда git rm удаляет файл из рабочей директории и индекса.
git rm file.txt— удаление файла.git rm -f file.txt— принудительное удаление файла.git rm --cached file.txt— удаление файла только из индекса, оставляя его в рабочей директории.git rm -r directory— рекурсивное удаление директории.git rm -n file.txt— просмотр файлов, которые будут удалены, без их удаления.git rm --ignore-unmatch file.txt— игнорирование ошибок при удалении файла.git rm -f --cached file.txt— принудительное удаление файла из индекса, оставляя его в рабочей директории.git rm -r --cached directory— рекурсивное удаление директории только из индекса.git rm -q file.txt— удаление файла без вывода сообщений.git rm -r --force directory— рекурсивное принудительное удаление директории.

