Git. Основные команды
Git - система контроля версий, используется для ведения истории изменения файлов в вашем проекте. Чаще всего его используют для кода, но можно и для других файлов.
Для начала проверим установлен ли git
1$ git --version
Если ничего не ругнулось и видно версию, то git установлен.
Для установки необходимо скачать и поставить его https://git-scm.com/downloads
Начальная конфигурация git
Делается один раз. Применяется для всех создаваемых проектов глобально. Задаем наше Имя и наш E-mail.
1$ git config --global user.name "username"
2$ git config --global user.email "username@testmail.com"
Создание проекта
После основной конфигурации переходим в папку где будет проект и вводим:
1$ git init
После этого мы можем задать Имя и email, но только это уже будет локально для этого проекта. Если пропустить этот шаг, то будут применяться наши глобальные настройки с нашим Именем и Почтой, которые мы указали выше.
1$ git config user.name "Test user"
2$ git config user.email "test@mail.com"
Создаем файл в директории нашего проекта test.txt
.
1$ touch test.txt
Пишем что то в него и добавляем его на индексацию, чтобы git отслеживал изменения в нем.
1$ git add test.txt
2$ git add . # Добавляет все измененные файлы в текущей директории
3$ git add * # Добавляет все измененные файлы
Для проверки состояния git репозитория.
1$ git status
Добавляем коммит.
1$ git commit -m "my commit"
Опять смотрим статус. Должен быть норм.
История коммитов.
Для просмотра истории коммитов используем.
1$ git log
2$ git log --pretty=oneline # Вывод истории в одну строку
3$ git log --pretty=oneline --max-count=3 # Выводит последние 3 коммита
4$ git log --pretty=oneline --all # Выводит все коммиты
5$ git log --pretty=oneline --author="Name author" # Выводит коммиты автора
Также можем задать свой формат вывода коммитов.
Перечисляем через пробел или другой разделитель.
1 %h - короткая верситя хеша, которая тоже будет работать при наших выборках.
2 %s - комментарий коммита
3 %ad - дата создания коммита
4 %an - автор коммита
1$ git log --pretty=format:"s : %ad [ %an ]"
Тоже самое, но с более короткой и красивой датой
1$ git log --pretty=format:"s : %ad [ %an ]" --date=short
Вернуть изменения до предыдущего любого коммита. Для этого нам понадобится хеш коммита к которому хотим откатится. Таким образом можна найти на каком этапе кто то что то поломал.
1$ git checkout <commit hash>
Вы можете быстро просмотреть изменения, внесенные в файл, используя команду diff:
1$ git diff <filename>
или
1$ git diff <commit hash> <filename>
Затем, чтобы вернуть конкретный файл этому фиксатору, используйте команду reset:
1$ git reset <commit hash> <filename>
Для того чтобы вернутся назад к последнему коммиту:
1$ git checkout master
Отмена индексации
Для файла или файлов. Если передумали их коммитить.
1$ git reset HEAD <filename>
Кроме отмены индексации можно отменить изменения в файле до предыдущего коммита.
1$ git checkout <filename>
Удаление последнего коммита.
Сделать это можно с помощью нового пустого коммита.
1$ git revert HEAD --no-edit
Создание веток
Для создания дополнительной ветки в репозитории.
1$ git checkout -b <branch name>
Просмотр всех веток:
1$ git branch
Cимвол *
, указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает HEAD
).
Слияние веток
Например у нас есть ветка dev, и мы хотим из неё слить изменения в ветку master. Для этого переходим в ветку, в которую хотим сливать изменения.
1$ git checkout master
2$ git merge dev
Если есть конфликты при слиянии веток, решаем конфликт и делаем коммит командой:
1$ git commit
Удаление веток
Удаляет локальную ветку, если уже сделан её пуш и мердж:
1$ git branch -d <branch name>
Принудительно (force) удаляет локальную ветку, несмотря ни на что:
1$ git branch -D <branch name>
Теперь удалим такую же ветку из самого репозитория:
1$ git push origin --delete stage
Удаление всех локальных веток, если не существует удаленных (были удалены):
1$ git fetch --all --prune
2$ git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d
rebase
Например если мы работаем в ветке dev и нам нужно подтянуть новый функционал с ветки master. Можна использовать команду merge, но лучше rebase. Переходим в ветку master и делаем:
1$ git rebase dev
Лучше его использовать только для себя, в своей ветке. Чтобы не нарушить работу других разработчиков. Для веток где работают несколько разработчиков лучше merge.
Удалённый репозиторий
Добавить наш существующий локальный проект на сервер.
1$ git remote add origin https://github.com/username/test-repo.git
или
1$ git remote add origin ssh://git@github.com/username/test-repo.git
Если добавили неправильную ссылку, то удалить командой:
1$ git remote remove origin
Дальше для отправки на удаленный репозиторий используем команду
1$ git push -u origin master
Для последующих отправок кода на удаленный сервер достаточно будет просто выполнить:
1$ git push
По умолчанию отправляется ветка master. Для того чтобы запушить другую ветку нужно выполнить:
1$ git push origin <branch name>
Чтобы подтянуть изменения с удаленного репозитория в локальный нужно воспользоватся командой:
1$ git pull origin <branch name>
Бывает что нужно подтянуть изменения с удаленного репозитория себе локально, но есть незакоммиченые локальные правки. Для этого есть команда stash. Которая позволяет скрыть локальные не коммиченые изменения.
1$ git stash
Дальше подтягиваем удаленные изменения.
1$ git pull --rebase origin master
И потом опять достаем скрытые локальные изменения.
1$ git stash pop
stash позволяет скрывать более одного набора изменений. Можно просмотреть список скрытых изменений в корзине.
1$ git stash list
Для просмотра последнего изменения добавленого в корзину выполнить:
1$ git stash show
Для применения последнего изменения добавленого в корзину:
1$ git stash apply
После этого нужно удалить из корзины изменение:
1$ git stash drop
Или просто можно выполнить, для применения и удаления из корзины:
1$ git stash pop
Для очистки всей корзины изменений:
1$ git stash clear
Подмодули. Submodules
Для добавления используется комманда:
1$ git submodule add
…
1$ git submodule add https://github.com/chaconinc/DbConnector
Создание тегов.
Теги бывают двух видов: лёгкие и с анотацией.
Легкие
По умолчанию <коммит>
указывает на HEAD, можно указать например v1.0.0. Привязка идёт к коммиту. Метка.
1$ git tag <имя_тега> <коммит>
Для просмотра списка тегов
1$ git tag
Для удаления тегов
1$ git tag -d <имя тега>
С анотацией Не просто метка, а тег с привязанным к нему сообщением.
1$ git tag -a -m <описание тега> <имя_тега> <коммит>
Просмотр тега
1$ git show <имя_тега>
Git — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.