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
и так далее.