Основные команды 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 pull
git pull
с использованием флага --rebase
, который перебазирует текущую ветку на самый новый коммит из удаленной ветки вместо создания слияния:
git pull --rebase
git pull
с использованием флага --no-commit
, который предотвращает создание автоматического коммита после выполнения слияния:
git pull --no-commit
git pull
с использованием флага --ff-only
, который выполнит слияние только в том случае, если это можно сделать быстрым перемещением ветки вперед fast-forward
:
git pull --ff-only
git pull
с использованием флага --no-ff
, который выполнит слияние только как коммит слияния merge commit
, даже если это можно сделать быстрым перемещением ветки вперед:
git pull --no-ff
git 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 -r
git 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 <имя ветки>
имя ветки
это имя ветки, изменения из которой вы хотите объединить в текущую ветку.
Примеры использования.
Сначала, вам нужно переключиться на ветку, в которую вы хотите объединить изменения:
git checkout master
Затем вы можете выполнить команду git merge, указав имя ветки, из которой вы хотите получить изменения:
git merge 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
используется для поиска любой строки или регулярного выражения в любом из файлов вашего проекта, даже в более ранних его версиях.