--- 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` | | Список локальных веток | | `git branch` | `-a` | Список локальных и удалённых веток | | `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` |