Статья ориентирована больше для новичков
Использование системы контроля версий для сайта является очень удобным и не использует ее наверно только ленивый. Отслеживание изменений в коде множество преимуществ
- работать в команде, одновременно над разными или одной и той же задачей не боясь что-то затереть другому
- всегда можно откатиться к определенному состоянию
- внести изменения в сторонний модуль и сохранить возможность обновлять решение (после обновления можно сравнить версии и внести корректировки)
- выгружать изменения сделанные локально на рабочем компьютере на сервер в одной командой и применить их на сервере тоже одной командой, вместо копирования по FTP
- и многое другое
Ниже приведу примеры часто используемых команд
Примеры приводятся с учетом что используется Linux и git уже установлен
Создание репозитория
Для создания репозитория в текущем проекте переходим в дирректорию с проектом и вводим
git init
Создался репозиторий и появилась соответствующая поддиректория.
Создание .gitignore
Далее можно создать файл .gitignore, чтобы задать правила для запрета отслеживания отдельных файлов и папок, например так
.idea/
/docker/
/github/
/bitrix/
/logs/
/node_modules/
log.txt
*.xml
/vendor/
/upload/
.phpunit.result.cache
.phpunit.cache/
Добавления файлов в список отслеживаемых
Чтобы гит начал отслеживать изменения в файлах, необходимо сначала добавить эти файлы в индекс. Это можно делать как по одному файлу, дирокетории, так и сразу все используя точку
git add robots.txt
или
git add .
Отмена git add
Чтобы отменить добавление файла в индекс с сохранением изменений, необходимо выполнить команду
git reset path/filename
Сохранение изменений - git commit
После добавления изменений, необходимо их зафиксировать.
Перед фиксацией изменений, необходимо указать кто будет автором фиксации. Для этого нужно указать ваши имя и email адрес
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@mail.ru
Добавляем файлы, изменения по которым нужно зафиксировать
git add .
git commit -m "Первый комит, инициализация"
Отмена git commit
Если случайно добавили в лишние файлы в комит, используя команду git commit -am "...", можно отменить комит с сохранением изменений
git reset --soft HEAD~
Просмотр истории - git log
Зафиксировав изменения, можем посмотреть историю зафиксированных изменений
git log
Создание удаленного репозитория
Репозиторий должен где то храниться, чтобы его могли скачать другие разработчики работающие с вами, либо вы могли работать на разных компьютерах, например на работе и что то доделать дома.
Для этого можно воспользоваться github.com, bitbuсket.org и тд. Также можно хранить репозиторий на своем сервере или временно в отдельной директории на своем компьютере.
Создаем директорию локально или на сервере, инициализируем гит без рабочего каталога
mkdir site.ru.git
cd site.ru.git
git init --bare
Указываем куда выгружать, удаленный репозиторий
Теперь находясь в дирректории с проектом, можно указать где хранится удаленный репозиторий и куда все будет выгружаться и откуда скачиваться.
git remote add origin /path-to/site.ru.git
Варианты пути
- /path-to/site.ru.git - если хранится репозиторий на локальной машине
- user:password@host:/path-to/site.ru.git
- host:/path-to/site.ru.git
Последний вариант будет работать если у вас настроен вход по ключу на сервер.
Отправка изменений в удаленный репозиторий
Отправим сделанные зафиксированные изменения в удаленный репозиторий
git push
или git push origin master
Если это первая отправка, то нужно еще и подписаться на отслеживание изменений
git push -u origin master
Восстановление удаленного файла
Иногда в процессе разработки можно удалить лишний фал, для его восстановление можно использовать команду, которая восстановит файл до его последнего зафиксированного состояния
git checkout HEAD^ deleted_file.txt
Или используя часть идентификатора комита в котором был удален c7efa038f0d84
git checkout c7efa038f0d84^ -- deleted_file.txt
Ветвление
При работе нескольких разработчиков, удобно работать над задачей в отдельной ветке. Это позволяет в критических ситуациях быстро подготовить исправление, не думая о том, что часть файлов может вызвать другие проблемы (так как основная задача еще выполняется).
Переключение на другую ветку
Переключимся на другую ветку - task12 . Ключ -b сообщает что необходимо создать такую ветку.
git checkout -b task12
Применение изменений из другой ветки
После того как задача выполнена в отдельной ветке, изменения нужно перенести в основную ветку - master (может называться и main или иначе). Для этого переключаемся на основную ветку и объединяем
git checkout master
git merge task12
Поле объединения можно выгружать изменения в репозиторий, чтобы они были доступны всем разработчикам проекта.
В процессе могут возникнуть сообщения о невозможности объединения, которые нужно решать уже вручную, и выбирать что нужно оставить а что убрать. Для этого есть соответствующие команды и инструменты.
error: failed to push some refs ... / Diverging branches can't be fast-forwarded, you need to either:..
Ошибки такого вида часто бывают когда есть изменения в удаленном репозитории и локально зафиксированы изменения. Лечится довольно просто
git rebase origin/master