Git
Git — это система управления версиями, позволяет отслеживать изменения в исходном коде. Она позволяет создавать коммиты проекта, ветвления и слияния изменений. Тут основные тезисы и команды для работы с гитом из учебника.
Установка Git в Linux
sudo apt-get install git
После установки, проверяем версию
git --version
// Ответ
git version 2.43.0
Конфиг лежит в файле ~/.gitconfig Сюда Git запишет настройки, например алиасы, ник пользователя, объем буфера и прочее.
В новой системе после установки укажем пользователя и почту. Эту инфу Git будет включать в коммиты.
git config --global user.name "Dxrkd3v" <-- Имя пользователя
git config --global user.email "dxrkd3v@mail.com" <-- Email пользователя
Ключ --global указывает что эти данные будут использоваться для всех файлов в системе.
Посмотеть изминения в файле ~/.gitconfig можно через ключ --list например
git config --list
// ответ
user.name=Dxrkd3v
user.email=dxrkd3v@mail.com
Чтобы начать работу с Git нужно его проинициализировать командой находясь в директории.
git init
Эта команда создаст пустую папку с расширением .git в вашем проекте.
Добавление в стейдж
Чтобы начать управлять изминениями файлов нужно добавить их в стейдж или индекс командой git add . она добавит все файлы в стейдж, либо после git add прописать нужные файлы вручную, например:
git add index.html
и после этого можно делать коммит, то есть сохранение состояния
git commit -m "text of your commit"
Проверить состояние файлов позволяет команда status
git status
Команда git status дает исчерпывающий ответ, в Гите есть флаг позволяющий
получить ту же инфу но в сокращенном виде это --short
git status --short
//ответ
m index.html
a style.css
m <-- modded
a <-- added
Gitignore
Для исключения слежения за отдельными файлами или директориями используют .gitignore со списком паттернов
Пример файла gitignore
# это комментарий
*.md <-- пропускать markdown файлы
*.png <-- пропускать картинки с расширением png
diff
Чтобы узнать что было отредактировано но не добавлено в индекс и что проиндексировано
и готово для добавления в стейдж используется команда diff
Чтобы посмотреть что из проиндексированного войдет в следующий коммит нужна команда git diff --staged
После добавления в стейдж git diff ничего не вернет.
Выйти из меню с git diff нужно нажать :q ;)
A команда git diff --cached покажет проиндексированные изминения
Коммит
Когда все настроено, можно делать первый коммит.
Для этого используется команда git commit она откроет редактор который указан в .gitconfig можно поменять редактор если нужно
git config --global core.editor vim
//укажет vim редактором по умолчанию
Команда git commit откроет vim и в нем нужно набрать сообщение для коммита
# Пожалуйста, введите сообщение коммита для ваших изменений. Строки,
# начинающиеся с # будут проигнорированы, а пустое сообщение
# отменяет процесс коммита.
Сообщение для коммита можно также указать через консоль поставив флаг -m
git commit -m "текст сообщения коммита"
Пропуск файлов
Если набрать команду git commit с флагом -a то система Git начнет автоматически индексировать
все отслеживаемые файлы перед их фиксацией что позволяет обойтись без команды git add но как по мне то лучше так не стоит делать ;)
Удаление файлов из проекта
Чтобы Git перестал следить за изминениями в файле его нужно удалить из индекса и зафиксировать данное изминение. Это делает команда git rm заодно удаляет файл из рабочей папки.
git rm index.html
//rm сокращенно remove
При следующей фиксации изминений файл пропадет и перестанет отслеживаться.
Если файл отредактирован и уже в индексе нужно воспользоваться параметром -f т.е. force чтобы
принудительно стереть все данные и не было возможности восстановления средствами Git.
Чтобы оставить файл в папке проекта но удалить из индекса и сделать его невидимым для Git
нужна команда git rm с параметром --cached например
git rm --cached index.html
Перемещение файлов
После переименования файла у системы Git не сохранятся никаких метаданных что
этот файл был переименован. При этом в гите есть команда mv то есть move
которая позволяет переименовать файл, например:
git mv oldFileName.html newFileName.html
Эта команда выполнит те же действия что и следующие 3 строчки
mv oldFileName.html newFileName.html
git rm oldFileName.html
git add newFileName.html
Просмотр истории версий
После нескольких сохранений или клонирования файлов можно взглянуть
на список действий которые были сделаны с помощью команды git log
Эта команда выведет информацию о коммитах созданных ранее, содержит контольную сумму SHA-1, имя автора, почту, дату создания и сообщение коммита.
У git log есть очень много параметров. Рассмотрю самые популярные.
Это флаг -p который показывает разницу внесенную каждым коммитом.
Для получения краткой статистики по каждой из версии прменяется параметр --stat
git log --stat
Параметр –stat позволяет вывести под записью о каждой версии список измененных файлов, их количество, а также количество добавленных в них и удаленных из них строк.
Еще одним крайне полезным параметром является --pretty. Он меняет формат
вывода информации. Есть несколько предустановленных вариантов. Параметр
oneline выводит каждый коммит в одну строку, что весьма удобно при просмотре
большого числа коммитов. Параметры short, full и fuller, практически не меняя
формат вывода, определяют его детализацию:
$ git log --pretty=oneline
ca82...63949 changed the verison number
085b...6e7e7 removed unnecessary test
a11b...209e6 first commit
Наиболее интересен параметр format, позволяющий выводить записи журнала
в выбранном вами формате.
Самые распространенные параметры форматирования:
| Параметр | Описание выводимых данных |
|---|---|
| %H | Хеш-код коммита |
| %h | Сокращенный хеш-код коммита |
| %T | Хеш-код дерева |
| %t | Сокращенный хеш-код дерева |
| %P | Хеш-код родительских коммитов |
| %p | Сокращенный хеш-код родительских коммитов |
| %an | Имя автора |
| %ae | Электронная почта автора |
| %ad | Дата создания оригинала |
| %ar | Дата создания оригинала, в относительной форме |
| %cn | Имя создателя версии |
| %ce | Электронная почта создателя версии |
| %cd | Дата создания версии |
| %cr | Дата создания версии в относительном формате |
| %s | Комментарий |
git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Dxrkd3v, 6 years ago : changed the version number
085bb3b - Dxrkd3v, 6 years ago : removed unnecessary test
a11bef0 - Dxrkd3v, 6 years ago : first commit
%h <-- Сокращенный хеш-код коммита
%n <-- Имя автора
%ar <-- Какое время назад
%s <-- Текст коммита
Параметры oneline и format особенно полезны в сочетании с другим параметром команды log, который называется –graph. Он добавляет небольшой ASCII-граф с историей ветвлений и слияний
git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Распространенные параметры команды git log
Вот таблица с распространёнными параметрами команды git log:
| Параметр | Описание |
|---|---|
git log |
Показывает историю коммитов в текущей ветке. |
git log -n <число> |
Ограничивает вывод последними <число> коммитами. |
git log --oneline |
Показывает сокращённый вывод (хеш и сообщение коммита в одну строку). |
git log --graph |
Отображает историю в виде графа с ветвлениями и слияниями. |
git log --all |
Показывает историю всех веток, а не только текущей. |
git log --author=<имя> |
Фильтрует коммиты по автору. |
git log --since=<дата> |
Показывает коммиты, сделанные после указанной даты. |
git log --until=<дата> |
Показывает коммиты, сделанные до указанной даты. |
git log --grep=<текст> |
Ищет коммиты, в сообщениях которых есть указанный текст. |
git log --stat |
Показывает статистику изменений в файлах для каждого коммита. |
git log --patch |
Показывает изменения в файлах (дельта) для каждого коммита. |
git log --pretty=<формат> |
Настраивает формат вывода (например, --pretty=format:"%h - %an, %ar : %s"). |
git log --abbrev-commit |
Показывает сокращённые хеши коммитов. |
git log --decorate |
Показывает ссылки на ветки и теги, связанные с коммитами. |
git log --merges |
Показывает только коммиты слияния (merge). |
git log --no-merges |
Показывает только обычные коммиты, исключая слияния. |
git log <файл> |
Показывает историю изменений конкретного файла. |
git log branch1..branch2 |
Показывает коммиты, которые есть в branch2, но отсутствуют в branch1. |
git log --follow <файл> |
Показывает историю файла, включая переименования. |
Отмена изминений
Необходимость отмены чаще всего возникает при слишком ранней фиксации из- менений, когда вы забыли добавить в коммит какие-то файлы или ошиблись с со- общением фиксации. Для повторного сохранения версии в такой ситуации можно воспользоваться параметром –amend
git commit –amend
В итоге останется единственный коммит — второй коммит заменит результат первого.
git commit -m 'изначальный коммит'
git add index.html
git commit --amend
Отмена индексирования
Для отмены индексирования существует команда reset
git reset HEAD index.html
modified: index.html
// теперь файл показывается как просто измененный
Отмена внесенных в файл изменений
Быстро отменить изминения и вернуть файл в состояние,
в котором он находился до последней фиксации
поможет git checkout
git checkout -- index.html
Команда отменяет все изминения.
Отображение удаленных репозиториев
Просмотр уже настроенных удаленных серверов осуществляется
командой git remote
Параметр -v позволяет увидеть URL-адреса, которые хранить Git.
git remote -v
Origin https://github.com/dxrkd3v/blog (fetch)
Origin https://github.com/dxrkd3v/blog (push)
Добавление удаленных репозиториев
Чтобы добавить репозиторий под коротким именем, которое упростит дальнейшие обращения к
нему, используют команду
git remote add [сокращенное имя] [url]
git remote add dxrk https://github.com/dkd3v/blog
git remote -v
origin https://github.com/dxrkd3v/blog (fetch)
origin https://github.com/dxrkd3v/blog (push)
dxrk https://github.com/dkd3v/blog (fetch)
dxrk https://github.com/dkd3v/blog (push)
Теперь вместо полного URL-адреса в командную строку можно вводить имя dxrk.
К примеру, для скачивания всей инфы нужно набрать git fetch dxrk
Удаление и переименование удаленных репозиториев
Переименование ссылок осуществляется командой git remote rename,
меняющей сокращенные имена удаленных репозиториев.
git remote rename dxrk dark
git remote
origin
dark
Удалить ссылку на удаленный репозиторий
git remote rm dark
git remote
origin
Теги
Создать в Git тег, снабженный комментарием
поможет параметр -a к команде tag
git tag -a v1.2 -m "моя версия 1.2"
git tag
v1.2
В примере параметр -m позволяет добавить комментарий.
Для просмотра данных тега вместе с помеченным им
коммитом служит команда git show
Перед информацией о коммите выводятся данные человека, поставившего тег, дата пометки коммита и текст комментария.
Тегами можно помечать и сделанные ранее коммиты. Предположим, что история зафиксированных состояний выглядит так:
git log --pretty=oneline
9fceb02...61af8 bug fixed
964f16d...4abbc second commit
8a5cbc4...2908a first commit
Чтобы поставить тег на коммит сделанный ранее нужно в конце команды указать хеш коммита или первую часть хеша
git tag -a v1.2 9fceb02
Проверим наличие тега
git tag
v1.2
git show v1.2
// выведет имя автора тега с почтой
// и датой + сам коммит
push тегов
Созданные теги отправляются на сервер отдельной командой
git push origin [имя тега]
Если нужно запушить все теги, ставят флаг --tags
git push origin --tags
Псевдонимы или aliases
Команда git config позволяет легко создать псевдоним для любой команды.
git config --global alias.a 'add .'
git config --global alias.c commit
git config --global alias.s status
Теперь можно набирать git s вместо git status и так далее.