Основные команды Git
Git сегодня — это очень популярная система контроля версий. Поэтому шпаргалка по Git, состоящая из основных команд — это то, что может вам пригодиться.
Основные команды
git init
Команда git init используется для создания нового локального репозитория Git. После выполнения этой команды Git создает в текущей директории новую поддиректорию с именем .git, в которой хранятся все файлы Git, необходимые для управления версиями в этом репозитории. Синтаксис команды:
git init [--bare] [<directory>]directory указывает директорию, в которой создается локальный репозиторий. Если параметр не указан, репозиторий создается в текущей директории.
Основные флаги:
- --templateпозволяет указать кастомный шаблон инициализации
- --separate-git-dirпозволяет разместить репозиторий в другой директории
- --bareопределяет репозиторий как голый, без рабочей директории. Это используется для создания удаленного репозитория
Примеры использования.
cd my_project
git initЭта команда создает новый локальный репозиторий Git в текущей директории my_project. Git создает поддиректорию .git и инициализирует ее файлами, необходимыми для управления версиями.
Флаг --bare используется для создания голого удаленного репозитория:
mkdir my_repo.git
cd my_repo.git
git init --bareЭта команда создает новый удаленный репозиторий Git в директории my_repo.git. Флаг --bare указывает, что это голый репозиторий, без рабочей директории.
git clone
Команда git clone используется для создания локальной копии удаленного репозитория Git. Это позволяет вам получить копию проекта на вашем локальном компьютере и начать работу с ним. Синтаксис команды:
git clone <URL репозитория> [<название локальной папки>]Где URL репозитория это URL-адрес удаленного репозитория Git, а название локальной папки (необязательный параметр) это название локальной папки, в которую будет склонирован репозиторий. Если название локальной папки не указан, Git автоматически создаст папку с названием репозитория.
Примеры использования.
git clone https://github.com/username/repo.gitЭта команда создаст локальную копию удаленного репозитория repo, который находится в аккаунте username на GitHub, в папке с названием repo.
Если вы хотите указать свое собственное название для локальной папки, вы можете добавить его после URL-адреса репозитория:
git clone https://github.com/username/repo.git myprojectЭта команда создаст локальную копию удаленного репозитория repo в папке myproject. Если папка myproject уже существует, Git выведет сообщение об ошибке и не склонирует репозиторий.
git status
Команда git status используется для получения информации о текущем состоянии вашего рабочего пространства Git. Она показывает, какие файлы были изменены, какие из них были добавлены в индекс, и какие из них готовы к коммиту. Кроме того, команда git status сообщает о текущей ветке и другой полезной информации. Синтаксис команды:
git status [-s] [--long] [--branch] [--porcelain] [--ignore-submodules[=<when>]]Основные флаги:
- -sили- --shortпоказывает краткую информацию о состоянии файлов в формате- git diff --shortstat
- --longпоказывает длинный формат состояния файлов, включая информацию о последнем коммите для каждого файла
- --branchпоказывает текущую ветку и ее состояние
- --porcelainпоказывает состояние файлов в машинно-читаемом формате, что полезно для автоматизации
- --ignore-submodulesпозволяет игнорировать изменения в подмодулях
Примеры использования.
$ git status
На ветке main
Ваша ветка опережает «origin/main» на 1 коммит.
  (используйте «git push», чтобы опубликовать локальные коммиты)
изменения, которые будут включены в коммит:
  (используйте «git restore --staged <file>...», чтобы убрать из индекса)
        изменён:   README.md
изменения, которые не проиндексированы для коммита:
  (используйте «git add <file>...», чтобы проиндексировать)
        изменён:   index.html
нет изменений добавленных для коммита (используйте «git add» и/или «git commit -a»)Эта команда показывает, что находитесь на ветке main, ваша локальная ветка опережает ветку origin/main на один коммит и что были внесены изменения в файлы README.md и index.html. Файл README.md был проиндексирован и готов к коммиту, а файл index.html не был проиндексирован. Для того, чтобы проиндексировать файл index.html, нужно использовать команду git add index.html.
git diff
Команда git diff используется для просмотра различий между версиями файлов в репозитории. Она показывает, какие изменения были сделаны в файлах с момента последнего коммита. Синтаксис команды:
git diff [<опции>] [<источник>] [<цель>]Где источник определяет начальную точку изменений для отображения различий. цель определяет конечную точку изменений для отображения различий. опции дополнительные флаги, изменяющие поведение команды.
Основные флаги:
- --cachedсравнивает изменения между вашим индексом (т.е. тем, что будет в следующем коммите) и последним коммитом
- --statпоказывает статистику изменений для каждого файла
- --colorотображает различия с использованием цветов для лучшей читаемости
Примеры использования.
git diff - простой запуск команды покажет различия между вашей рабочей копией и последним коммитом
git diff --cached - покажет различия между вашим индексом и последним коммитом
git diff HEAD - покажет различия между вашей рабочей копией и последним коммитом
git diff HEAD~2 HEAD - покажет различия между двумя последними коммитами
git diff --stat - покажет статистику изменений для каждого файла
git diff --color - покажет различия с использованием цветовКроме того, можно использовать git diff для сравнения любых двух коммитов, веток или тэгов в репозитории. Например, git diff branch1 branch2 покажет различия между двумя ветками branch1 и branch2.
git log
Команда git log используется для просмотра истории коммитов в репозитории Git. Она отображает список коммитов в обратном хронологическом порядке, начиная с последнего. Синтаксис команды:
git logЭта команда показывает список всех коммитов в репозитории, от самых последних до самых старых. Каждый коммит включает SHA-1 хеш, автора коммита, дату и время коммита, комментарий.
Основные флаги команды:
- --onelineпоказывает каждый коммит в одной строке, содержащей только его SHA-1 хеш и комментарий
- --graphпоказывает историю коммитов в виде графа, что позволяет легко визуализировать разветвленную историю ветвлений и слияний
- --author=<имя>показывает только коммиты, сделанные указанным автором
- --since=<дата>показывает только коммиты, сделанные после указанной даты
- --until=<дата>показывает только коммиты, сделанные до указанной даты
- -n <количество>показывает только указанное количество последних коммитов
- --grep=<строка>показывает только коммиты, содержащие указанную строку в своих комментариях
Примеры использования.
Пример использования флага --since:
git log --since=2022-01-01Эта команда показывает список всех коммитов, сделанных после 1 января 2022 года.
Пример использования флага --author:
git log --author="John Doe"Эта команда показывает список всех коммитов, сделанных автором с именем «John Doe».
Пример использования флага --grep:
git log --grep="bug"Эта команда показывает список всех коммитов, содержащих слово «bug» в своих комментариях.
git pull
Команда git pull используется для получения изменений из удаленного репозитория и объединения их с вашей локальной веткой. Синтаксис команды:
git pull [<options>] [<repository> [<refspec>]]Основные флаги:
- --rebaseвыполняет перебазирование текущей ветки на самый новый коммит вместо создания слияния- merge. Рекомендуется использовать этот флаг, если вы хотите, чтобы история коммитов оставалась простой и понятной
- --no-rebaseотменяет перебазирование и выполняет слияние вместо этого
- --no-commitпредотвращает создание автоматического коммита после выполнения слияния. Это дает возможность внести дополнительные изменения перед фиксацией изменений
- --ff-onlyвыполнить слияние только в том случае, если это можно сделать быстрым перемещением ветки вперед- fast-forward
- --no-ffвыполнить слияние только как коммит слияния- merge commit, даже если это можно сделать быстрым перемещением ветки вперед
Примеры использования.
Простой git pull, который получает изменения из удаленной ветки и автоматически объединяет их с локальной веткой:
git pullgit pull с использованием флага --rebase, который перебазирует текущую ветку на самый новый коммит из удаленной ветки вместо создания слияния:
git pull --rebasegit pull с использованием флага --no-commit, который предотвращает создание автоматического коммита после выполнения слияния:
git pull --no-commitgit pull с использованием флага --ff-only, который выполнит слияние только в том случае, если это можно сделать быстрым перемещением ветки вперед fast-forward:
git pull --ff-onlygit pull с использованием флага --no-ff, который выполнит слияние только как коммит слияния merge commit, даже если это можно сделать быстрым перемещением ветки вперед:
git pull --no-ffgit push
Команда git push используется для отправки изменений из вашего локального репозитория в удаленный репозиторий Git. Это позволяет обновить содержимое удаленного репозитория на основе ваших локальных изменений. Синтаксис команды:
git push <remote> <branch>emote имя удаленного репозитория, куда вы хотите отправить изменения, а 
Основные флаги:
- -uили- --set-upstreamустанавливает отслеживание для ветки, что позволяет вам использовать- git pushи- git pullбез указания имени удаленного репозитория и названия ветки
- -fили- --forceзаставляет Git принудительно заменить удаленную ветку измененной локальной веткой, даже если это приведет к потере данных
- -nили- --dry-runпозволяет вам протестировать команду- git push, не отправляя реальных изменений в удаленный репозиторий
- -vили- --verboseвыводит дополнительную информацию о процессе отправки изменений
Примеры использования.
git push origin mainЭта команда отправляет изменения из вашей локальной ветки main в удаленный репозиторий с именем origin.
Пример использования команды:
git push -u origin mainЭта команда отправляет изменения из вашей локальной ветки main в удаленный репозиторий с именем origin и устанавливает отслеживание для этой ветки.
git add
Команда git add . используется для добавления изменений в индекс Git. Индекс — это промежуточный слой между рабочей директорией (где находятся ваши файлы) и репозиторием Git (где сохраняются изменения). Когда вы делаете изменения в файлах в рабочей директории, они не автоматически добавляются в индекс. Для того, чтобы добавить изменения в индекс, необходимо использовать команду git add . Синтаксис команды:
git add .Эта команда добавляет все измененные файлы в рабочей директории в индекс.
git commit
Команда git commit используется для сохранения изменений, сделанных в вашем локальном репозитории, в истории коммитов. Каждый коммит в Git имеет уникальный идентификатор, дату и время коммита, имя автора, электронную почту и сообщение, описывающее изменения. Синтаксис команды:
git commit -m "<сообщение коммита>"сообщение коммита это краткое описание изменений, сделанных в коммите.
Основные флаги:
- -mозначает message (сообщение)
Пример использования.
git commit -m "Добавлен новый файл README.md"git checkout
Команда git checkout в Git используется для переключения между ветками, проверки коммитов и отката изменений. Она позволяет переключаться между различными состояниями вашего репозитория.
Основные флаги:
- -bсоздать новую ветку и переключиться на нее. Например,- git checkout -b new-branchсоздаст новую ветку с названием- new-branchи переключится на нее
- -fпринудительно перезаписывает локальные изменения, которые не были зафиксированы. Этот флаг используется только в крайних случаях
- -p: позволяет просмотреть и выбрать конкретные изменения для восстановления
- <commit/branch>: позволяет переключиться на определенный коммит или ветку
Пример использования.
Переключение на ветку:
git checkout mainЭта команда переключает вас на ветку «main».
Создание новой ветки и переключение на нее:
git checkout -b new-branchЭта команда создает новую ветку с названием «new-branch» и переключает вас на нее.
Переключение на определенный коммит:
git checkout 2a3e8c9Эта команда переключает вас на коммит с указанным идентификатором.
Отмена изменений в файле:
git checkout myfile.txtЭта команда отменяет изменения в файле «myfile.txt» и восстанавливает его до последней зафиксированной версии.
Восстановление определенных изменений:
git checkout -p myfile.txtЭта команда позволяет вам просмотреть изменения в файле «myfile.txt» и выбрать, какие из них восстановить.
git branch
Команда git branch используется для просмотра, создания и удаления веток в репозитории Git. Ветка — это отдельная линия разработки, которая может включать в себя свой собственный набор коммитов.
Основные флаги:
- -aпоказывает все ветки включая удаленные
- -dудаляет ветку, данная команда удаляет только те ветки, которые были слиты в текущую ветку
- -Dудаляет ветку без проверки, были ли все её изменения слиты с текущей веткой
- -mпереименовывает текущую ветку
- -rпоказывает все удаленные ветки
Примеры использования.
Просмотр списка веток:
git branchСоздание новой ветки:
git branch new-branchПереименование текущей ветки:
git branch -m new-branch-nameУдаление ветки:
git branch -d branch-to-deleteПросмотр удаленных веток:
git branch -rgit fetch
Команда git fetch используется для получения изменений из удаленного репозитория Git, но не вносит изменения в локальную ветку. Эта команда позволяет вам получить информацию о ветках и коммитах, которых еще нет в локальном репозитории. Синтаксис команды:
git fetch [<remote>] [<refspec>]Основные флаги:
- remoteимя удаленного репозитория Git (например, origin). Если не указан, Git использует имя origin по умолчанию
- refspecимена веток и тегов, которые вы хотите получить из удаленного репозитория. Если не указан, Git получает все ветки и теги
Примеры использования.
git fetchЭта команда получает все изменения из удаленного репозитория Git, который связан с вашим локальным репозиторием. После выполнения этой команды вы можете выполнить команду git log origin/master для просмотра истории изменений в удаленной ветке master.
git fetch origin feature-branchЭта команда получает все изменения из удаленной ветки feature-branch в удаленном репозитории Git, связанном с вашим локальным репозиторием. После выполнения этой команды вы можете выполнить команду git log origin/feature-branch для просмотра истории изменений в удаленной ветке feature-branch.
git merge
Команда git merge используется для объединения изменений из одной ветки в другую. Она применяется для слияния изменений, которые были внесены в отдельной ветке, обычно для объединения фиксации ошибок или добавления функциональности в проект. Синтаксис команды:
git merge origin/<branch>origin наш настроенный удаленный репозиторий, псевдоним установленный как ключ вместо URL удаленного репозитория.
branch это имя ветки, изменения из которой вы хотите объединить в текущую ветку.
Примеры использования.
Сначала, вам нужно переключиться на ветку, в которую вы хотите объединить изменения:
git checkout masterЗатем вы можете выполнить команду git merge, указав имя ветки, из которой вы хотите получить изменения:
git merge origin/feature-branchВ этом примере мы объединяем изменения из ветки feature-branch в текущую ветку master.
Основные флаги:
- --no-ffотключает быстрое слияние, что создает коммит с объединением, даже если изменения можно было бы просто быстро применить
- --abortотменяет текущее слияние и возвращает репозиторий в предыдущее состояние
Пример использования флага --no-ff:
git merge --no-ff feature-branchВ этом примере мы отключаем быстрое слияние и создаем новый коммит с объединением.
Пример использования флага --abort:
git merge --abortВ этом примере мы отменяем текущее слияние и возвращаем репозиторий в предыдущее состояние.
git rebase
Команда git rebase используется для перебазирования текущей ветки на другую ветку или на определенный коммит. Это означает, что изменения из исходной ветки будут применены поверх коммитов в целевой ветке или коммите.
Основные флаги:
- -i (или --interactive)запускает интерактивный режим, который позволяет изменять порядок, объединять или отбрасывать коммиты
- -m (или --merge)используется, когда нужно перебазировать ветку слияния
- --onto <branch>: перебазирует текущую ветку на указанную ветку
Примеры использования.
Перебазирование текущей ветки на другую ветку:
git checkout feature-branch
git rebase mainВ этом примере текущая ветка feature-branch перебазируется на ветку main. Это означает, что изменения из ветки main будут применены поверх коммитов в ветке feature-branch.
Перебазирование текущей ветки на определенный коммит:
git checkout feature-branch
git rebase abc123В этом примере текущая ветка feature-branch перебазируется на коммит с хеш-кодом abc123. Это означает, что изменения из этого коммита и всех коммитов после него будут применены поверх коммитов в ветке feature-branch.
Использование интерактивного режима:
git checkout feature-branch
git rebase -i mainВ этом примере запускается интерактивный режим, который позволяет изменять порядок, объединять или отбрасывать коммиты при перебазировании ветки feature-branch на ветку main.
Перебазирование ветки слияния:
git checkout merge-branch
git rebase -m mainВ этом примере ветка merge-branch, являющаяся веткой слияния, перебазируется на ветку main. Опция -m используется для корректной обработки коммитов слияния.
git revert
Команда git revert используется для отмены определенного коммита и создания нового коммита, который отменяет изменения предыдущего коммита. Это делает команду безопасной для использования в общем репозитории, поскольку она не изменяет историю коммитов. Синтаксис команды:
git revert <commit>commit это хэш-идентификатор коммита, который нужно отменить.
Основные флаги:
- --no-commit:применить изменения, но не создавать новый коммит. Это позволяет вам проверить изменения перед тем, как закоммитить их
- -m parent-number:используется, если коммит имеет несколько родительских коммитов (как в случае с объединением веток). Он указывает, какой из родительских коммитов следует использовать при выполнении операции отмены
Пример использования:
git log --oneline
d3b3d43 Commit C
786f7f8 Commit B
12556fa Commit A
git revert d3b3d43Эта команда создаст новый коммит, который отменяет изменения, внесенные коммитом с хэш-идентификатором d3b3d43.
Пример использования команды git revert с флагом --no-commit:
git revert --no-commit d3b3d43
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
      modified:   file.txtЭта команда отменяет изменения, внесенные коммитом с хэш-идентификатором d3b3d43, и добавляет их в индекс. Но новый коммит не создается, пока не будет выполнена команда git commit.
Редкие команды
git difftool
Команда git difftool просто запускает внешнюю утилиту сравнения для показа различий в двух деревьях, на случай если вы хотите использовать что-либо отличное от встроенного просмотрщика git diff.
git reset
Команда git reset, как можно догадаться из названия, используется в основном для отмены изменений. Она изменяет указатель HEAD и, опционально, состояние индекса. Также эта команда может изменить файлы в рабочей директории при использовании параметра --hard, что может привести к потере наработок при неправильном использовании, так что убедитесь в серьёзности своих намерений прежде чем использовать его.
git rm
Команда git rm используется в Git для удаления файлов из индекса и рабочей директории. Она похожа на git add с тем лишь исключением, что она удаляет, а не добавляет файлы для следующего коммита.
git mv
Команда git mv — это всего лишь удобный способ переместить файл, а затем выполнить git addдля нового файла и git rm для старого.
git clean
Команда git clean используется для удаления мусора из рабочей директории. Это могут быть результаты сборки проекта или файлы конфликтов слияний.
git mergetool
Команда git mergetool просто вызывает внешнюю программу слияний, в случае если у вас возникли проблемы слияния.
git stash
Команда git stash используется для временного сохранения всех незакоммиченных изменений для очистки рабочей директории без необходимости коммитить незавершённую работу в новую ветку.
git tag
Команда git tag используется для задания постоянной метки на какой-либо момент в истории проекта. Обычно она используется для релизов.
git remote
Команда git remote служит для управления списком удалённых репозиториев. Она позволяет сохранять длинные URL репозиториев в виде понятных коротких строк, например «origin», так что вам не придётся забивать голову всякой ерундой и набирать её каждый раз для связи с сервером. Вы можете использовать несколько удалённых репозиториев для работы и git remote поможет добавлять, изменять и удалять их.
git archive
Команда git archive используется для упаковки в архив указанных коммитов или всего репозитория.
git submodule
Команда git submodule используется для управления вложенными репозиториями. Например, это могут быть библиотеки или другие, используемые не только в этом проекте ресурсы. У команды submodule есть несколько под-команд — add, update, sync и др. — для управления такими репозиториями.
git show
Команда git show отображает объект в простом и человекопонятном виде. Обычно она используется для просмотра информации о метке или коммите.
git shortlog
Команда git shortlog служит для подведения итогов команды git log. Она принимает практически те же параметры, что и git log, но вместо простого листинга всех коммитов, они будут сгруппированы по автору.
git describe
Команда git describe принимает на вход что угодно, что можно трактовать как коммит (ветку, тег) и выводит более-менее человекочитаемую строку, которая не изменится в будущем для данного коммита. Это может быть использовано как более удобная, но по-прежнему уникальная, замена SHA-1.
git bisect
Команда git bisect — это чрезвычайно полезная утилита для поиска коммита в котором впервые проявился баг или проблема с помощью автоматического бинарного поиска.
git blame
Команда git blame выводит перед каждой строкой файла SHA-1 коммита, последний раз менявшего эту строку и автора этого коммита. Это помогает в поисках человека, которому нужно задавать вопросы о проблемном куске кода.
git grep
Команда git grep используется для поиска любой строки или регулярного выражения в любом из файлов вашего проекта, даже в более ранних его версиях.