UNIXAWESOME

Git. Основные команды

May 29, 2021

git3.png

Git - система контроля версий, используется для ведения истории изменения файлов в вашем проекте. Чаще всего его используют для кода, но можно и для других файлов.

Для начала проверим установлен ли git

$ git --version

Если ничего не ругнулось и видно версию, то git установлен.

Для установки необходимо скачать и поставить его https://git-scm.com/downloads

Начальная конфигурация git

Делается один раз. Применяется для всех создаваемых проектов глобально.
Задаем наше Имя и наш E-mail.

$ git config --global user.name "username"
$ git config --global user.email "username@testmail.com"

Создание проекта

После основной конфигурации переходим в папку где будет проект и вводим:

$ git init

После этого мы можем задать Имя и email, но только это уже будет локально для этого проекта. Если пропустить этот шаг, то будут применяться наши глобальные настройки с нашим Именем и Почтой, которые мы указали выше.

$ git config user.name "Test user"
$ git config user.email "test@mail.com"

Создаем файл в директории нашего проекта test.txt.

$ touch test.txt

Пишем что то в него и добавляем его на индексацию, чтобы git отслеживал изменения в нем.

$ git add test.txt
$ git add .     # Добавляет все измененные файлы в текущей директории
$ git add *     # Добавляет все измененные файлы

Для проверки состояния git репозитория.

$ git status

Добавляем коммит.

$ git commit -m "my commit"

Опять смотрим статус. Должен быть норм.

История коммитов.

Для просмотра истории коммитов используем.

$ git log
$ git log --pretty=oneline                           # Вывод истории в одну строку
$ git log --pretty=oneline --max-count=3             # Выводит последние 3 коммита
$ git log --pretty=oneline --all                     # Выводит все коммиты
$ git log --pretty=oneline --author="Name author"    # Выводит коммиты автора

Также можем задать свой формат вывода коммитов.

Перечисляем через пробел или другой разделитель.

 %h - короткая верситя хеша, которая тоже будет работать при наших выборках.
 %s - комментарий коммита
 %ad - дата создания коммита
 %an - автор коммита
$ git log --pretty=format:"s : %ad [ %an ]"

Тоже самое, но с более короткой и красивой датой

$ git log --pretty=format:"s : %ad [ %an ]" --date=short

Вернуть изменения до предыдущего любого коммита. Для этого нам понадобится хеш коммита к которому хотим откатится. Таким образом можна найти на каком этапе кто то что то поломал.

$ git checkout <commit hash>

Вы можете быстро просмотреть изменения, внесенные в файл, используя команду diff:

$ git diff <filename>

или

$ git diff <commit hash> <filename>

Затем, чтобы вернуть конкретный файл этому фиксатору, используйте команду reset:

$ git reset <commit hash> <filename>

Для того чтобы вернутся назад к последнему коммиту:

$ git checkout master

Отмена индексации

Для файла или файлов. Если передумали их коммитить.

$ git reset HEAD <filename>

Кроме отмены индексации можно отменить изменения в файле до предыдущего коммита.

$ git checkout <filename>

Удаление последнего коммита.

Сделать это можно с помощью нового пустого коммита.

$ git revert HEAD --no-edit

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

Для создания дополнительной ветки в репозитории.

$ git checkout -b <branch name>

Просмотр всех веток:

$ git branch

Cимвол *, указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает HEAD).

Слияние веток

Например у нас есть ветка dev, и мы хотим из неё слить изменения в ветку master. Для этого переходим в ветку, в которую хотим сливать изменения.

$ git checkout master
$ git merge dev 

Если есть конфликты при слиянии веток, решаем конфликт и делаем коммит командой:

$ git commit

Удаление веток

Удаляет локальную ветку, если уже сделан её пуш и мердж:

$ git branch -d <branch name>

Принудительно (force) удаляет локальную ветку, несмотря ни на что:

$ git branch -D <branch name>

Теперь удалим такую же ветку из самого репозитория:

$ git push origin --delete stage

Удаление всех локальных веток, если не существует удаленных (были удалены):

$ git fetch --all --prune
$ git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d

rebase

Например если мы работаем в ветке dev и нам нужно подтянуть новый функционал с ветки master. Можна использовать команду merge, но лучше rebase. Переходим в ветку master и делаем:

$ git rebase dev

Лучше его использовать только для себя, в своей ветке. Чтобы не нарушить работу других разработчиков. Для веток где работают несколько разработчиков лучше merge.

Удалённый репозиторий

Добавить наш существующий локальный проект на сервер.

$ git remote add origin https://github.com/username/test-repo.git

или

$ git remote add origin ssh://git@github.com/username/test-repo.git

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

$ git remote remove origin

Дальше для отправки на удаленный репозиторий используем команду

$ git push -u origin master

Для последующих отправок кода на удаленный сервер достаточно будет просто выполнить:

$ git push

По умолчанию отправляется ветка master. Для того чтобы запушить другую ветку нужно выполнить:

$ git push origin <branch name>

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

$ git pull origin <branch name>

Бывает что нужно подтянуть изменения с удаленного репозитория себе локально, но есть незакоммиченые локальные правки. Для этого есть команда stash. Которая позволяет скрыть локальные не коммиченые изменения.

$ git stash

Дальше подтягиваем удаленные изменения.

$ git pull --rebase origin master

И потом опять достаем скрытые локальные изменения.

$ git stash pop

stash позволяет скрывать более одного набора изменений. Можно просмотреть список скрытых изменений в корзине.

$ git stash list

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

$ git stash show

Для применения последнего изменения добавленого в корзину:

$ git stash apply

После этого нужно удалить из корзины изменение:

$ git stash drop

Или просто можно выполнить, для применения и удаления из корзины:

$ git stash pop

Для очистки всей корзины изменений:

$ git stash clear

Подмодули. Submodules

Для добавления используется комманда:

$ git submodule add 

$ git submodule add https://github.com/chaconinc/DbConnector

Создание тегов.

Теги бывают двух видов: лёгкие и с анотацией.
Легкие
По умолчанию <коммит> указывает на HEAD, можно указать например v1.0.0. Привязка идёт к коммиту. Метка.

$ git tag <имя_тега> <коммит>

Для просмотра списка тегов

$ git tag

Для удаления тегов

$ git tag -d <имя тега>

С анотацией
Не просто метка, а тег с привязанным к нему сообщением.

$ git tag -a -m <описание тега> <имя_тега> <коммит>

Просмотр тега

$ git show <имя_тега>

Git  — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.