---
title: "Git: основные команды"
category: Программирование
tags: программирование, git
monofontoptions:
- Scale=0.8
...
## Ссылки
* [GitHowTo](https://githowto.com/ru/changes_not_files)
* [ProGit](https://git-scm.com/book/ru/v2)
* [Git Pocket Guide](https://github.com/maxliscia/git-pocket)
## Установка
В Debian/Ubuntu:
```sh
sudo apt-get install git
```
## Термины
| Термин | Англ | Определение |
| ------ | ------ | ----------------------- |
| Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге |
| Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта |
| Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в которой осуществляется подготовка к фиксации |
| SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории |
| Ветка | branch | Именованная последовательность в истории изменений |
| Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно |
| `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке |
| Метка | tag | Именованная ссылка на некоторую фиксацию в истории |
## Состояния
Файлы в рабочем каталоге могут отслеживаться системой контроля версий
(tracked) или нет (untracked). Отслеживаемые файлы, которые на диаграмме
обозначены зелёным фоном, могут быть неизменёнными (unmodified),
изменёнными (modified) или подготовленными к фиксации (indexed).
```plantuml
@startuml
participant untracked as "Неотслеживамые\n(untracked)"
box "Отслеживаемые"
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant unmodified as "Неизменённые\n(unmodified)" #99FF99
participant modified as "Изменённые\n(modified)" #77FF77
end box
untracked -> staged : git add
staged -> unmodified : git commit
unmodified -> modified : редактирование
modified -> staged : git add
modified -> untracked: git rm --cached
unmodified -> untracked: git rm --cached
staged -> untracked: git rm --cached
@enduml
```
Основные команды, осуществляющие взаимодействие между рабочим каталогом,
индексом, локальным и удалённым репозиторием, приведены на диаграмме ниже.
```plantuml
@startuml
participant workspace as "Рабочий каталог\n(working dir)"
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
workspace -> local : git commit -a
workspace -> index : git add (-u)
index -> local : git commit
local -> remote : git push
== Обновление с сервера ==
remote -> workspace : git pull (rebase)
remote -> local : fetch
== Откат изменений ==
local -[#red]> workspace : git checkout HEAD
index -[#red]> workspace : git checkout
== Сравнение ==
local -[#blue]> workspace : git diff HEAD
index -[#blue]> workspace : git diff
@enduml
```
## Настройка
| Команда | Ключи | Описание |
| ---- | ---------- | ------------ |
| `git config` | `--global user.name "John Doe"` | Имя текущего пользователя |
| `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя |
| `git config` | `--list` | Вывод текущей конфигурации |
| `git config` | `--global --list` | Вывод глобальной конфигурации |
## Инициализация
| Команда | Ключи | Описание |
| ---- | ------ | ------------ |
| `git init` | `
` | Создать пустой репозиторий в каталоге `` |
| `git clone` | `` `` | Создать в каталоге `` копию репозитория, находящегося по адресу `` |
| `git clone` | `--recursive ` `` | Создать в каталоге `` копию репозитория, находящегося по адресу ``, с учётом подмодулей |
## Подмодули
| Команда | Ключи | Описание |
| ---- | ------ | ------------ |
| `git submodule` | `add ` | Добавить в каталог `` текущего рапозитория подмодуль, находящийся по адресу `` |
| `git submodule` | `update --recursive --remote` | Обновить подмодули |
| `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules` |
Удаление подмодуля:
```sh
git submodule deinit
git rm
```
## Фиксация
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git add` | `` | Подготовить файл `` к фиксации |
| `git commit` | | Зафиксировать подготовленные файлы |
| `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены |
## Удаление
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git rm` | `` | Удалить файл из индекса и рабочего каталога |
| `git rm` | `-f ` | Принудительное удаление файла |
| `git rm` | `--cached ` | Удаление файла из проекта, но не из рабочего каталога |
## Информация
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git status` | `-s` | Вывод информации о рабочем каталоге в краткой форме |
| `git log` | `--oneline` | Вывод журнала изменений в краткой форме |
| `git ls-files` | | Вывод списка отслеживаемых и подготовленных файлов |
## Удалённый репозиторий
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git remote` | `-v` | Список адресов удалённых репозиториев |
| `git branch` | `-r` | Список веток в удалённых репозиториях |
| `git remote` | `add ` | Создать ссылку `` на удалённый репозиторий, находящийся по адресу `` |
| `git remote` | `rename ` | Переименовать ссылку `` на `` |
| `git remote` | `rm ` | Удалить ссылку `` |
* Обращение к удалённому репозиторию осуществляется по ссылке, создаваемой командой `git remote`
* Команда `git clone` автоматически создаёт ссылку `origin`
## Отправка изменений
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git push` | ` ` | Отправить ветку `` в удалённый репозиторий `` |
| `git push` | ` --all` | Отправить все ветки в удалённый репозиторий `` |
| `git push` | `--d ` | Удалить ветку `` из удалённого репозитория `` |
## Получение изменений
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git fetch` | `` | Получить изменения из всех веток репозитория ``, но не выполнять слияние |
| `git fetch` | ` ` | Получить изменения из ветки `` репозитория ``, но не выполнять слияние |
| `git merge` | `/` | Выполнить слияние с веткой `` репозитория `` |
| `git pull` | `` | Получение и слияние |
## Ветки
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git branch` | `-a` | Список локальных и удалённых веток |
| `git branch` | | Список локальных веток |
| `git branch` | `` | Создать ветку `` |
| `git checkout` | `` | Перейти к фиксации с идентификатором `` |
| `git branch` | `-m ` | Переименовать ветку `` в `` |
| `git merge` | `` | Слить изменения из ветки `` в текущую ветку |
| `git branch` | `-d ` | Удалить ветку `` |
## Сравнение
| Команда | Ключи | Описание |
| ---- | ---- | ------------ |
| `git diff` | | Сравнить рабочий каталог и индекс |
| `git diff` | `–-cached` | Сравнить индекс и последнюю фиксацию |
| `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог |
| `git diff` | `--stat` | Краткий вывод результатов |
| `git diff` | ` ` | Сравнить две точки с указанными индетификаторами |
| `git diff` | ` | ` | Сравнивать только укзанный каталог `` или файл `` |
| `git difftool` | | Отобразить результаты сравнения в программе, определяемой переменной `diff.tool` |