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 — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.