Compare commits

...

2 Commits

Author SHA1 Message Date
f8a740a624 text 2019-05-28 15:57:56 +03:00
0003a98c30 text 2019-05-28 14:15:34 +03:00

View File

@ -28,16 +28,16 @@ sudo apt-get install git
## Термины ## Термины
| Термин | Англ | Определение | | Термин | Англ | Определение |
| ------ | ------ | ----------------------- | | ------ | ------ | ----------------------- |
| Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге | | Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге |
| Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта | | Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта |
| Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в которой осуществляется подготовка к фиксации | | Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в которой осуществляется подготовка к фиксации |
| SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории | | SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории |
| Ветка | branch | Именованная последовательность в истории изменений | | Ветка | branch | Именованная последовательность в истории изменений |
| Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно | | Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно |
| `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке | | `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке |
| Метка | tag | Именованная ссылка на некоторую фиксацию в истории | | Метка | tag | Именованная ссылка на некоторую фиксацию в истории |
## Состояния ## Состояния
@ -45,13 +45,13 @@ sudo apt-get install git
Файлы в рабочем каталоге могут отслеживаться системой контроля версий Файлы в рабочем каталоге могут отслеживаться системой контроля версий
(tracked) или нет (untracked). Отслеживаемые файлы, которые на диаграмме (tracked) или нет (untracked). Отслеживаемые файлы, которые на диаграмме
обозначены зелёным фоном, могут быть неизменёнными (unmodified), обозначены зелёным фоном, могут быть неизменёнными (unmodified),
изменёнными (modified) или подготовленными к фиксации (staged). изменёнными (modified) или подготовленными к фиксации (indexed).
```plantuml ```plantuml
@startuml @startuml
participant untracked as "Неотслеживамые\n(untracked)" participant untracked as "Неотслеживамые\n(untracked)"
box "Отслеживаемые" box "Отслеживаемые"
participant staged as "Подготовленные к фиксации\n(staged)" #55FF55 participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant unmodified as "Неизменённые\n(unmodified)" #99FF99 participant unmodified as "Неизменённые\n(unmodified)" #99FF99
participant modified as "Изменённые\n(modified)" #77FF77 participant modified as "Изменённые\n(modified)" #77FF77
end box end box
@ -101,20 +101,20 @@ index -[#blue]> workspace : git diff
## Настройка ## Настройка
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---------- | ------------ | | ---- | ---------- | ------------ |
| `git config` | `--global user.name "John Doe"` | Имя текущего пользователя | | `git config` | `--global user.name "John Doe"` | Имя текущего пользователя |
| `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя | | `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя |
| `git config` | `--list` | Вывод текущей конфигурации | | `git config` | `--list` | Вывод текущей конфигурации |
| `git config` | `--global --list` | Вывод глобальной конфигурации | | `git config` | `--global --list` | Вывод глобальной конфигурации |
## Инициализация ## Инициализация
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ------ | ------------ | | ---- | ------ | ------------ |
| `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>` | | `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>` |
| `git clone` | `<giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>` | | `git clone` | `<giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>` |
| `git clone` | `--recursive <giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`, с учётом подмодулей | | `git clone` | `--recursive <giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`, с учётом подмодулей |
@ -122,9 +122,9 @@ index -[#blue]> workspace : git diff
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ------ | ------------ | | ---- | ------ | ------------ |
| `git submodule` | `add <giturl> <dir>` | Добавить в каталог `<dir>` текущего рапозитория подмодуль, находящийся по адресу `<giturl>` | | `git submodule` | `add <giturl> <dir>` | Добавить в каталог `<dir>` текущего рапозитория подмодуль, находящийся по адресу `<giturl>` |
| `git submodule` | `update --recursive --remote` | Обновить подмодули | | `git submodule` | `update --recursive --remote` | Обновить подмодули |
| `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules` | | `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules` |
Удаление подмодуля: Удаление подмодуля:
@ -138,168 +138,84 @@ git rm <path/to/submodule>
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации | | `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации |
| `git commit` | | Зафиксировать подготовленные файлы | | `git commit` | | Зафиксировать подготовленные файлы |
| `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены | | `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены |
## Удаление ## Удаление
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога | | `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога |
| `git rm` | `-f <filename>` | Принудительное удаление файла | | `git rm` | `-f <filename>` | Принудительное удаление файла |
| `git rm` | `--cached <filename>` | Удаление файла из проекта, но не из рабочего каталога | | `git rm` | `--cached <filename>` | Удаление файла из проекта, но не из рабочего каталога |
## Информация ## Информация
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git status` | `-s` | Вывод информации о рабочем каталоге в краткой форме | | `git status` | `-s` | Вывод информации о рабочем каталоге в краткой форме |
| `git log` | `--oneline` | Вывод журнала изменений в краткой форме | | `git log` | `--oneline` | Вывод журнала изменений в краткой форме |
| `git ls-files` | | Вывод списка отслеживаемых и подготовленных файлов | | `git ls-files` | | Вывод списка отслеживаемых и подготовленных файлов |
## Удалённый репозиторий ## Удалённый репозиторий
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git remote` | `-v` | Список адресов удалённых репозиториев | | `git remote` | `-v` | Список адресов удалённых репозиториев |
| `git branch` | `-r` | Список веток в удалённых репозиториях | | `git branch` | `-r` | Список веток в удалённых репозиториях |
| `git remote` | `add <name> <url>` | Создать ссылку `<name>` на удалённый репозиторий, находящийся по адресу `<url>` | | `git remote` | `add <name> <url>` | Создать ссылку `<name>` на удалённый репозиторий, находящийся по адресу `<url>` |
| `git remote` | `rename <old> <new>` | Переименовать ссылку `<old>` на `<new>` | | `git remote` | `rename <old> <new>` | Переименовать ссылку `<old>` на `<new>` |
| `git remote` | `rm <name>` | Удалить ссылку `<name>` | | `git remote` | `rm <name>` | Удалить ссылку `<name>` |
* Обращение к удалённому репозиторию осуществляется по ссылке, создаваемой командой `git remote` * Обращение к удалённому репозиторию осуществляется по ссылке, создаваемой командой `git remote`
* Команда `git clone` автоматически создаёт ссылку `origin` * Команда `git clone` автоматически создаёт ссылку `origin`
## Отправка изменений ## Отправка изменений
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git push` | `<remote> <branch>` | Отправить ветку `<branch>` в удалённый репозиторий `<remote>` | | `git push` | `<remote> <branch>` | Отправить ветку `<branch>` в удалённый репозиторий `<remote>` |
| `git push` | `<remote> --all` | Отправить все ветки в удалённый репозиторий `<remote>` | | `git push` | `<remote> --all` | Отправить все ветки в удалённый репозиторий `<remote>` |
| `git push` | `--d <remote> <branch>` | Удалить ветку `<branch>` из удалённого репозитория `<remote>` | | `git push` | `--d <remote> <branch>` | Удалить ветку `<branch>` из удалённого репозитория `<remote>` |
## Получение изменений ## Получение изменений
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
| ---- | ---- | ------------ | | ---- | ---- | ------------ |
| `git fetch` | `<remote>` | Получить изменения из всех веток репозитория `<remote>`, но не выполнять слияние | | `git fetch` | `<remote>` | Получить изменения из всех веток репозитория `<remote>`, но не выполнять слияние |
| `git fetch` | `<remote> <branch>` | Fetch specific branch | | `git fetch` | `<remote> <branch>` | Получить изменения из ветки `<branch>` репозитория `<remote>`, но не выполнять слияние |
| `git merge` | `<remote>/<branch>` | Merge fetched remote | | `git merge` | `<remote>/<branch>` | Выполнить слияние с веткой `<branch>` репозитория `<remote>` |
| `git pull` | `<remote>` | Fetch and merge in one command | | `git pull` | `<remote>` | Получение и слияние |
Reference: https://git-scm.com/docs/git-fetch, https://git-scm.com/docs/git-pull
## $branch ## Ветки
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
|---------|-------|----------| | ---- | ---- | ------------ |
| `git branch` | | List branches | | `git branch` | `-a` | Список локальных и удалённых веток |
| `git branch` | `<branchname>` | Create new branch | | `git branch` | | Список локальных веток |
| `git checkout` | `<sha-1>` | Switch to branch, or commit | | `git branch` | `<branch>` | Создать ветку `<branch>` |
| `git branch` | `-m <branchname> <newname>` | Rename branch | | `git checkout` | `<sha-1>` | Перейти к фиксации с идентификатором `<sha-1>` |
| `git merge` | `<branchname>` | Merge changes from `<branchname>` to current branch | | `git branch` | `-m <old> <new>` | Переименовать ветку `<old>` в `<new>` |
| `git branch` | `-d <branchname>` | `--delete` branch | | `git merge` | `<branch>` | Слить изменения из ветки `<branch>` в текущую ветку |
| `git branch` | `-d <branch>` | Удалить ветку `<branch>` |
Reference: https://git-scm.com/docs/git-branch
## $diff ## Сравнение
| Команда | Ключи | Описание | | Команда | Ключи | Описание |
|---------|-------|----------| | ---- | ---- | ------------ |
| `git diff` | | Compare **`working directory`** and **`index`** | | `git diff` | | Сравнить рабочий каталог и индекс |
| | `-cached` | Compare **`index`** and **`latest commit`** | | `git diff` | `-cached` | Сравнить индекс и последнюю фиксацию |
| | `HEAD` | Compare **`latest commit`** and **`working directory`** | | `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог |
| | `--stat` | Optional short format | | `git diff` | `--stat` | Краткий вывод результатов |
| | `<sha-1> <sha-1>` | 2 points in time to compare | | `git diff` | `<sha-1> <sha-1>` | Сравнить две точки с указанными индетификаторами |
| | `<dir> | <file>` | Compare whole directory or limit to file | | `git diff` | `<dir> | <file>` | Сравнивать только укзанный каталог `<dir>` или файл `<file>` |
| `git difftool` | | Отобразить результаты сравнения в программе, определяемой переменной `diff.tool` |
Reference: https://git-scm.com/docs/git-diff
**Examples:**
```shell
## compare changes made to README.md between working tree (default) and latest commit (HEAD)
$ git diff --stat HEAD ./path/README.md
## compare changes made to README.md between 2 specific points in time (e.g. 2 commits)
$ git diff --stat a649900 24bdd58 ./path/README.md
```
## $tag
| Команда | Ключи | Описание |
|---------|-------|----------|
| `git tag` | | List tags |
| `git tag` | `<v1.0.0>` | Create tag, from latest commit, lightweight |
| `git tag` | `-a <v1.0.0> -m "<msg>"` | Create tag, with `--annotate`, from latest commit |
| `git tag` | `-a <v1.0.0> -m "<msg>" <SHA-1>` | Create tag, with `--annotate`, from specific commit |
| `git tag` | `-d <v1.1.0>` | `--delete` tag |
| `git show` | `<v1.0.0>` | Show tag data and message |
| `git checkout` | `<v1.0.0>` | Switch to specific point tag (not editable) |
| `git push` | `<remote> <tag>` | Push specific tag to `<remote>` (recommended) |
| `git push` | `<remote> --tags` | Push all tags to `<remote>` (only if necessary) |
Инициализация репозитория в каталоге `dir`:
```sh
git init dir
```
Клонирование репозитория `repo`, принадлежащего пользователю `user`,
с сервера `gitlab.2` в каталог `dir`:
```sh
git clone git@gitlab.2:user/repo.git dir
```
Просмотр состояния рабочего каталога и репозитория:
```sh
git status
```
Краткая форма вывода состояния:
```sh
git status -s
```
Добавление файла `README.md` под версионный контроль и подготовка
к фиксации:
```sh
git add README.md
```
Удаление файла `README.md` из индекса репозитория:
```sh
git rm --cached README.md
```
Зафиксировать файлы, подготовленные к фиксации:
```sh
git commit
```
Зафиксировать все отслеживаемые файлы, которые были изменены:
```sh
git commit -a
```
Отправить все ветки репозитория на сервер с меткой `origin`:
```sh
git push origin
```