Начало работы в GIT

подготовлено редакций сайта

Linux

apt-get install git-core

Mac

brew install git

Windows

Скачивание с сайта

Терминология

Репозиторий

Репозиторий Git — это хранилище, в котором расположен ваш проект и его история. Это может быть локальное хранилище где-то на вашем компьютере или удаленное хранилище на сервисе типа GitHub или другом хостинге в Интернете. Репозиторий служит для отслеживания изменений в проекте, координации работы между несколькими людьми и отслеживания истории проекта.

programmers

Скажем, у вас на компьютере есть директория со всеми файлами вашего проекта. Когда вы инициализируете репозиторий Git в этой директории, Git создает скрытую поддиректорию под названием .git, в которой хранится вся информация о репозитории. Эта информация включает историю всех изменений, внесенных в репозиторий, а также его текущее состояние.

Коммит

Вы можете думать о коммите как о снимке вашего проекта в определенный момент времени. Правда, коммит содержит только информацию об изменениях, которые были внесены в репозиторий с момента последнего коммита. Он не содержит все файлы репозитория (если только это не первый коммит). Таким образом, каждый коммит — это небольшой кусочек истории репозитория, основанный на предыдущем коммите. Все они связаны между собой в цепочку, формируя историю изменений вашего проекта.

Ветка

Ветка — это параллельная версия репозитория. Ветки позволяют вам работать над отдельными функциями вашего проекта, не влияя на основную версию. Закончив работу над новой фичей, вы можете объединить эту ветку с основной версией проекта.

Стартовые команды

Импорт данных в репозиторий

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

programmers
Имя ветки

Мы будем использовать main в качестве имени ветки по умолчанию. Чтобы установить его, выполните следующую команду:

Корректная обработка окончаний строк

Для пользователей Unix/Mac:

Для пользователей Windows:

Создание проекта

Создайте страницу

Начните работу в пустой директории (например, respositories, если вы скачали архив с предыдущего шага) с создания пустой поддиректории work, затем войдите в неё и создайте там файл hello.html с таким содержанием:

Создайте репозиторий

Теперь у вас есть директория с одним файлом. Чтобы создать Git-репозиторий из этой директории, выполните команду git init.

Добавьте страницу в репозиторий

Теперь давайте добавим в репозиторий страницу hello.html

Проверьте состояние репозитория

Используйте команду git status, чтобы проверить текущее состояние репозитория.

Индексация и коммит

Проверьте состояние репозитория

Отдельный шаг индексации в Git позволяет вам разделять большие изменения на маленькие коммиты. Предположим, что вы отредактировали три файла (a.html, b.html, и c.html).

История

Теперь вы хотите закоммитить все изменения, при этом чтобы изменения в a.html и b.html были одним коммитом, в то время как изменения в c.html логически не связаны с первыми двумя файлами и должны идти отдельным коммитом. В теории, вы можете сделать следующее:

Получение списка произведенных изменений — функция команды git log.
Однострочная история

Вы полностью контролируете то, что отображает log. Мне, например, нравится однострочный формат:

Контроль отображения записей

Вот еще варианты просмотра истории:

Все варианты просмотра истории git-log

Изощряемся

Вот что я использую для просмотра изменений, сделанных за последнюю неделю.

Конечный формат лога

для большей части работы подходит следующий формат лога.

Вывод по умолчанию

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

Создание тегов версий

Думаю, вы согласитесь, что работать с хешами коммитов напрямую просто неудобно. Разве не было бы здорово, если бы вы могли обозначать конкретные коммиты понятными для человека названиями? Таким образом, вы могли бы четко видеть важные вехи в истории проекта. Кроме того, вы могли бы легко перейти к определенной версии проекта по ее названию. Именно для этого в Git придумали теги.

Давайте назовем текущую версию страницы hello.html первой, то есть v1.

Создайте тег первой версии

Теперь текущая версия страницы называется v1.

Теги для предыдущих версий

Обозначим версию, предшествующую текущей, названием v1-beta. Прежде всего, мы переключимся на предыдущую версию. Вместо того чтобы искать хеш коммита, мы будем использовать обозначение ^, а именно v1^, указывающее на коммит, предшествующий v1.

Переключение по имени тега

Теперь попробуйте попереключаться между двумя отмеченными версиями.

Просмотр тегов с помощью команды tag

Вы можете увидеть, какие теги доступны, используя команду git tag.

Просмотр Тегов в логах команды tag

Вы также можете посмотреть теги в логе.

Отмена изменений до индексации

Переключитесь на ветку main

Убедитесь, что вы находитесь на последнем коммите ветки main, прежде чем продолжить работу.

Отмена проиндексированных изменений (перед коммитом)

Отмена изменений в рабочем каталоге

Используйте команду checkout для переключения в версию файла hello.html в репозитории.

Измените файл и проиндексируйте изменения

Внесите изменение в файл hello.html в виде нежелательного комментария. Проиндексируйте это изменение.

Проверьте состояние

Проверьте состояние нежелательного изменения.

Сбросьте области подготовки

Команда reset сбрасывает область подготовки к HEAD. Это очищает область подготовки от изменений, которые мы только что проиндексировали.

Команда reset (по умолчанию) не изменяет рабочую директорию. Поэтому рабочая директория всё еще содержит нежелательный комментарий. Мы можем использовать команду checkout из предыдущего урока, чтобы убрать нежелательные изменения в рабочей директории.

Переключитесь на версию коммита

Наша рабочая директория опять чиста.

Удаление коммитов из ветки

Revert из предыдущего раздела является мощной командой, которая позволяет отменить любые коммиты в репозиторий. Однако, и оригинальный и «отмененный» коммиты видны в истории ветки (при использовании команды git log).

Часто мы делаем коммит, и сразу понимаем, что это была ошибка. Было бы неплохо иметь команду «возврата», которая позволила бы нам сделать вид, что неправильного коммита никогда и не было. Команда «возврата» даже предотвратила бы появление нежелательного коммита в истории git log.

Команда reset

Мы уже видели команду reset и использовали ее для согласования области подготовки с выбранным коммитом (в предыдущем уроке мы использовали коммит HEAD).

Если выполнить команду reset с указанием ссылки на коммит (т.е. метки HEAD, имени ветки или тега, хеша коммита), то команда...

  1. Изменит текущую ветку, чтобы она указывала на указанный коммит.
  2. Опционально сбросит область подготовки до соответствия с указанным коммитом.
  3. Опционально сбросит рабочую директорию до соответствия с указанным коммитом.
Проверьте нашу историю

Давайте сделаем быструю проверку нашей истории коммитов.

Мы видим, что два последних коммита в этой ветке - «Oops» и «Revert Oops». Давайте удалим их с помощью сброса.

Для начала отметьте эту ветку

Но прежде чем удалить коммиты, давайте отметим последний коммит тегом, чтобы потом можно было его найти.

Сброс к предшествующему коммиту

Глядя на историю лога (см. выше), мы видим, что коммит с тегом v1 является коммитом, предшествующим ошибочному коммиту. Давайте сбросим ветку до этой точки. Поскольку ветка имеет тег, мы можем использовать имя тега в команде сброса reset (если она не имеет тега, мы можем использовать хеш коммита).