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

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 branchCимвол *, указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает 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 -drebase
Например если мы работаем в ветке 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 popstash позволяет скрывать более одного набора изменений. Можно просмотреть список скрытых изменений в корзине.
$ 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 — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.