Инструменты пользователя

Инструменты сайта


git._shpargalka

Git. Шпаргалка


Man

Есть три способа открыть страницу руководства по любой команде Git:

git help <verb>
git <verb> --help
man git-<verb>

Создание Git-репозитория

Создание локального репозитория

git init                    # создать репозиторий в текущем каталоге
git init <directory>        # создать репозиторий в указанном каталоге

Создание локального репозитория существующего проекта

git init        # Создать Git-репозиторий в текущем каталоге
git add .       # Индексировать рекурсивно все данные в каталоге
git commit      # Создать первый commit (снимок)

Индексация

Добавление файла в репозиторий

git add file.txt        # Добавить один файл
git add .               # Добавить каталог рекурсивно
git add *.html          # Добавить файлы по маске

Сброс индексации

Игнорирование файлов

Шаблон игнорируемых файлов задается в .gitignore или .git/info/exclude . Пример содержимого:

*.[oa]        # Все файлы, которые заканчиваются на .o или .a
!lib.a        # Однако НЕ игнорировать файл lib.a
*~            # Всё, что заканчивается на ~
/TODO         # Игнорировать файл TODO, однако НЕ каталог TODO
build/        # Игнорировать все файлы в каталоге build/
doc/*.txt     # Игнорировать, например, doc/notes.txt, но не doc/server/arch.txt
doc/**/*.txt  # Игнорировать все .txt файлы во всех вложенных в doc/ каталогах

При этом помним:

  • пустые строки, а так же строки, начинающиеся с #, игнорируются
  • можно использовать стандартные glob-шаблоны
  • можно начать шаблон символом слэша /, чтобы избежать рекурсии
  • можно заканчивать шаблон символом слэша / для указания каталога
  • можно инвертировать шаблон, использовав восклицательный знак ! в качестве первого символа

Удаление из индекса

При удалении файла с диска, он остаётся в Git и помечается как Cnahget not staged for commit (Изменённый, но не проиндексированный). Для того, чтобы удаление файла попало в индекс, необходимо так же выполнить git rm. С данной команды можно и начинать, по умолчанию удаляется файл из индекса и рабочего каталога

git rm README              # Удалить файл README из индекса и рабочего каталога
git rm --cached README     # Удалить файл README только из индекса (на диске файл останется)

Перемещение файлов

Git не отслеживает перемещение файлов явно.

git mv file_from file_to

Данная команда аналогично следующему процессу

mv file_from file_to
git rm file_from
git add file_to

Просмотр изменений

Просмотр неиндексрованных изменений

git diff           # в консоли
git difftool       # в графическом приложении (напр. vimdiff)

Просмотр индексированных изменений

git diff --staged
# или
git diff --cached

Commit (фиксированное изменение)

Создание коммита

git commit                         # Коммит изменений с добавлением комментария через редактор
git commit -m "First commit"       # Коммит изменений с комментарием в командной строке
git commit -a                      # Коммит с автоматическим индексированием всех отслеживаемых файлов

Редактор выбирается из следующего списка (в порядке приоритета):

  1. переменная среды GIT_EDITOR
  2. параметр конфигурации core.editor
  3. переменная среды VISUAL
  4. переменная среды EDITOR

Отмена коммита

Сделать коммит с новыми изменениями, отменяющими предыдущие. При этом предыдущий коммит останется доступным и будет отображаться при использовании команды git log

git revert HEAD --no-edit

Сброс коммитов к предшествующему состоянию

git reset --hard <hash>    # Удаление коммита по hash-коду. Все изменения в нём будут утеряны.
git reset --hard HEAD~1    # Удаление последнего коммита. Все изменения в последнем коммите будут утеряны.

Переход между состояниями

Перейти к последнему состоянию в ветке master:

git checkout master

Перейти к определённому состоянию в текущей ветке:

git checkout <hash>

Проверка состояния репозитория

git status

Операции отмены

Изменить последний коммит

Изменить последний коммит можно с помощью ключа --amend.
Пример добавления файла:

git commit -m 'initial commit'
git add forgotten_file
git commit --amend

Для изменения комментария к коммиту, при условии, что ещё не было внесено правок в индексируемые файлы, достаточно выполнить

git commit --amend

Отмена подготовки файла

Ситуация: есть 2 файла, добавленных в индекс. Необходимо закоммитить вначале изменения одного файла, затем второго.

git reset HEAD <filename_two>
git commit -m 'Commiting is first file'
git add <filename_two>
git commit -m 'Commiting is second file '

Отмена изменения измененного файла

Вернуть файл filename к состоянию из последнего коммита.

git checkout -- filename

При этом помним: всё что, не коммитим и теряем, вероятней всего теряем безвозвратно.


Работа с ветками

git branch                           # Посмотреть локальные ветки
git branch <имя_ветки>               # Создать ветку
git branch -v                        # Посмотреть последний коммит на каждой из локальных веток
git branch -a                        # Посмотреть все существующие локальные и удаленные ветки
git branch -a -v                     # Посмотреть последние коммиты на всех ветках (локальных и удаленных)
git branch -vv                       # Посмотреть отслеживаемые ветки
git branch -u origin/serverfix       # Сделать локальную ветку serverfix отслеживаемой
git branch new_branch 5a0eb04        # Создать ветку на определенном коммите
git branch -m <oldname> <newname>    # Переименовать ветку
git branch -m <newname>              # Переименовать текущую ветку
git branch -d <имя_ветки>            # Удалить ветку
git push origin --delete serverfix   # Удалить ветку serverfix на удаленном сервере
git checkout <имя_ветки>             # Переключится на ветку
git checkout -b <имя_ветки>          # Создать ветку и сразу же переключиться на нее

Слияние веток (в примере находимся на ветке master и сливаем с ней ветку hotfix)

git checkout master
git merge hotfix

История

git log                      # Вывод простой истории коммитов
git log -2                   # Вывод последних n записей, в примере вывод двух последних записей
git log -p -2                # Вывод дельты (diff) разницы между последними двумя изменениями (на уровне строк)
git log -p -2 --word-diff    # Вывод изменений между двумя последними коммитами на уровне слов
git log -2 --stat            # Вывод краткой статистики по 2 последним коммитам
git log --pretty=oneline     # И очень полезный ключ --pretty (позволяет изменить формат вывода лога)
 
git log --since=2.weeks      # Cписок коммитов, сделанных за последние две недели
git log --after="2017-01-01" # after является синонимом since
git log --until=2.weeks      # Список коммитов, сделанных ранее двух недель назад
git log --before="2017-01-01"# before является синонимом until
 
git log --author="Daniil Nareyko"    # Вывести только коммиты, которые были сделаны указанным пользователем
git log -S<stirng>           # Показать только коммиты, в которых изменение в коде повлекло за собой добавление ил удаление указанной строки
git log --oneline            # Список коммитов с хэшем (короткое число)

Более удобный формат вывода для постоянного использования:

git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short

Параметры ключа format

Параметр Описание выводимых данных
%H Хеш коммита
%h Сокращённый хеш коммита
%T Хеш дерева
%t Сокращённый хеш дерева
%P Хеши родительских коммитов
%p Сокращённые хеши родительских коммитов
%an Имя автора
%ae Электронная почта автора
%ad Дата автора (формат соответствует параметру --date=)
%ar Дата автора, относительная (пр. "2 мес. назад")
%cn Имя коммитера
%ce Электронная почта коммитера
%cd Дата коммитера
%cr Дата коммитера, относительная
%s Комментарий

Другие примеры:

git log --pretty=oneline --max-count=2
git log --pretty=oneline --since='5 minutes ago'
git log --pretty=oneline --until='5 minutes ago'
git log --pretty=oneline --author=<your name>
git log --pretty=oneline --all
git reflog # Просмотр истории перемещения указателя HEAD

Тэги

git tag                                # Посмотреть все (перечисляет в алфавитном порядке)
git tag -l 'v1.4.2.*'                  # Посмотреть попадающие под маску тэги
git tag -a v1.4 -m 'my version 1.4'    # Создать аннотированную метку на текущем коммите (ключ -а) с меточным сообщением (ключ -m)
git tag -a v1.4 -m 'my v1.4' 98fced0   # То же самое, но для определённого коммита (98fced0)
git tag <имя_метки>                    # Создание легковесной метки на текущем коммите
git show <tag>                         # Посмотреть данные аннотированной метки вместе с коммитом, который был помечен
git checkout <tag>^                    # Добавить тэг для предыдущего коммита
git checkout <tag>~1                   # Добавить тэг для предыдущего коммита 
git tag -d <tag>                       # Удалить тэг
git push origin v1.4                   # Отправить метку на общий сервер (по умолчанию git push метки не отправляет)
git push origin --tags                 # Отправить все метки на общий сервер

git._shpargalka.txt · Последнее изменение: 2020/07/12 20:18 — daniil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki