/ DEV

Системы контроля версий (GIT)

Представьте, что ваш проект состоит из сотни файлов и десятков тысяч строк кода. Вы вносите изменения в 20 файлов и добавляете 400 строк кода и вдруг становится понятно, что задача над которой вы работали больше не актуальна. На этом моменте нужно откатываться к состоянию исходного кода, которое было перед началом изменений.

Или в процессе работы над кодом стало понятно, что нужно срочно внести исправление в рабочий проект. Новую задачу в нерабочем состоянии выкладывать на сайт нельзя, а это значит, что исправление нужно вносить в ту версию кода, которая была до начала реализации новой задачи.

Решением является контроль версий. Выполняется он с помощью специальных программ, которые умеют версионировать контент. Вот некоторые из многочисленных возможностей данных систем:

  • Откат к любому предыдущему состоянию
  • Просмотр истории изменений
  • Совместная работа

Я в своей работе использую git и Bitbucket.

Итак, последовательность действий. Во-первых, гит нужно установить. Теперь нужно сгенерировать пару ключей: публичный и приватный. Запускаем

ssh-keygen

Нам нужен id_rsa.pub, публичный ключ, который мы передаем, чтобы получить доступ в нужные репозитории. Добавляем его содержимое в Bitbucket https://bitbucket.org/account/user/username/ssh-keys/, кнопка Add key.

Также необходимо прописать в настройках гита имя и email, чтобы пользователя можно было идентифицировать. В терминале вводим:

git config --global user.name "Имя пользователя"
git config --global user.email "Адрес электронной почты"

Теперь можно приступать к полноценной работе с репозиторием, коммитить, пушить и т.д.

Для начала перейдем в папку нашего проекта и инициируем гит, в терминале вводим:

git init

В корне появится скрытая папка .git это и есть наш локальный репозиторий. Команда

git add .

добавит все файлы и директории, кроме перечисленных в .gitignore в индексируемые.

Создадим коммит командой

git commit

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

Создадим удаленный репозиторий на Bitbucket https://bitbucket.org/repo/create?owner=username и подключим его к локальному.

git remote add origin git@bitbucket.org:username/repository.git

И запушим наши файлы в удаленный репозиторий

git push -u origin master

Ниже списком набор команд, которыми я пользуюсь с небольшими комментариями

git init # Инициализировать репозиторий
git remote add origin git@bitbucket.org:username/project.git #Добавить удаленный репозиторий
git clone git@bitbucket.org:username/project.git # Клонировать репозиторий
git status # Смотрим, что с рабочими файлами
git add script.js # Добавляем в индекс script.js
git add . # Добавляем все
git reset script.js # Убираем из индекса script.js
git reset # Убираем из индекса все
git diff  # Изменения
git diff script.js # Изменения в script.js
git commit # Коммит
git commit -m 'commit message' # Быстрый коммит
git commit -a -m 'commit message' # Быстрый коммит с добавлением файлов
git commit --amend -m 'new commit message' # Перезаписываем последний коммит
git reset --soft HEAD^ # Сброс последнего коммита
git branch # Смотрим локальные ветки
git branch -a # Смотрим все ветки
git checkout master # Переключаемся на мастер
git checkout -b branchname # Создаем новую ветку и переключаемся на нее
git checkout -b branchname origin/branchname # Создаем локальную ветку из копии с удаленного сервера
git branch -d branchname # Удаляем пустую или влитую локальную ветку
git branch -D new branch # Удаляем локальную ветку
git pull --rebase origin master # Изменения ветки в мастер
git fetch # Подтягиваем все изменения с сервера, не вливая их
git push origin branchname # Пушим ветку
git push -f origin branchname # Пушим ветку с перезаписью истории коммитов
git merge branchname # Мерджим ветку
git merge --no-ff branchname # Мерджим ветку с созданием мердж-коммита
git stash # Стэшим изменения
git stash pop # Вытаскиваем последние изменения из стэша
git stash list # Смотрим список стэша
git stash clear # Очищаем стэш
git log # Смотрим историю
git log -p # Смотрим историю с изменениями в файлах
git log --stat --graph # История коммитов в виде дерева
  • Документация git
  • Документация Bitbucket