Git за 15 минут

Примечание: Эта статья является продолжением статьи “Git за 5 минут” на моём сайте.

Информация о репозитории

Просмотреть информацию о файлах в вашем репозитории можно с помощью команды git status. Выглядит она так:

Текущая ветка: master
Эта ветка соответствует «origin/master».

Неотслеживаемые файлы:
  (используйте «git add <файл>...», чтобы добавить в то, что будет включено в коммит)
        файл.txt
        другой_файл.txt

индекс пуст, но есть неотслеживаемые файлы
(используйте «git add», чтобы проиндексировать их)

Там указано, были ли изменены файлы в вашем репозитории, были ли они удалены, закомиченны, проиндексированы и т.п. Кроме того, git предлагает команды, которые можно сделать с этими файлами.

Информацию о предыдущих коммитах можно посмотреть с помощью команды git log в таком виде:

commit d306c1dd4e1fd01b6e9eaa05784918d36a6a71ce
Author: Stepan Zubkov <stepanzubkov@florgon.com>
Date:   Wed Jul 1 12:08:49 2023 +0300

    Fix something helpful.

commit 496b190b296a31c74d6d4958d5e0f67b49cfd54f
Author: Stepan Zubkov <stepanzubkov@florgon.com>
Date:   Wed Jun 2 13:45:58 2022 +0300

    Add something helpful.

...

Тут помимо прочей информации указан хэш коммита после слова commit. Он используется в других командах git для операции с конкретным коммитом. Обычно полный хэш не требуется, можно использовать только 6 первых его символов.

С помощью git log --oneline Можно получить информацию о каждом коммите в более кратком виде.

Работа с ветками

Ветвление кода – одна из главных возможностей системы контроля версий. Она позволяет координировать работу нескольких человек над одним проектом или просто удобно разрабатывать несколько вещей в одном проекте одновременно. Вы можете обходиться и без веток, но их использование иногда очень помогает.

Главная команда для работы с ветками – git branch.

C помощью неё можно:

Создать ветку git branch имя-ветки
Удалить ветку (delete) git branch -d имя-ветки
Переименовать ветку (move) git branch -m старое-имя новое-имя
Копировать ветку (copy) git branch -c старое-имя новое-имя

При создании новой ветки текущая ветка со всей историей коммитов копируется в новую, независимсую. Изменения в этой новой ветке никак не затронут изменения в исходной ветке, пока вы этого не захотите.

Переключение на другую ветку

Переключиться на другую ветку можно с помощью команды git checkout имя-ветки. При этом в текущей ветке все изменения должны быть обязательно зафиксированны (сделан коммит). Команда git checkout -b имя-ветки создаст новую ветку (как команда git branch) и переключится на нёё. Если в качестве имени ветки вы укажете “-“, то git переключит вас на предыдущую ветку. Это очень удобно, когда вы работает сразу с двумя ветками.

Слияние веток

Чтобы совместить две ветки, перейдите в одну из веток и выполните команду git merge другая-ветка. В результате все изменения из второй ветки объединятся с первой веткой.

Но не всегда удаётся совместить ветки успешно. Иногда в обоих ветках изменили одно и тоже место в коде. Тогда git не сможет совместить ветки и осведомит вас о конфликтах и о тех файлах, в которых они произошли. Место с конфликтом выглядит так:

<<<<<<< HEAD
Changes
=======
New changes
>>>>>>> other

После указателя HEAD и до разделителя (знаков “=”) находится спорное место в исходной ветке, а после разделителя и до указателя other находятся изменения в ветке other. Разрешите конфликты и уберите указатели и разделитель. После этого закоммитьте изменения и слияние будет завершено.

Отправка новых веток в удалённый репозиторий

Если вы создали новую ветку, то команда git push не позволит вам отправить её, так как в удалённом репозитории не существует ветки с таким же именем.Поэтому в первый раз после создания ветки нужно использовать git push --set-upstream origin имя-ветки. В последуещие разы можно использовать просто git push.

Относительное указание коммитов

Для “обращения” к определённому коммиту можно не использовать его хэш, а указать его отношение к текущему коммиту. Текущий коммит называется HEAD. Запись HEAD~ означает предудыщий за HEAD коммит. HEAD~1 соответствует второму коммиту за HEAD и т.д.

Отмена коммитов

Отменить несколько последних коммитов можно с помощью команды git reset <коммит>. C флагом --soft эта команда оставит все файлы, которые вы изменили откатит вас к указанному коммиту. С флагом --hard все изменённые файлы так же откатятся к предыдущему коммиту, а новые файлы, ещё не проиндексированные, удалятся.

В качестве коммита вы можете указать как хэш (git reset --soft a4ddb2), так и коммит относительно HEAD (git reset --hard HEAD~2)

Заключение

Вы познакомились c основными командами git. Теперь вы можете на базовом уровне управлять коммитами, ветками и работать с удалённым репозиторием. Однако команд git гораздо больше, чем я рассказал и их возможности не ограничены моей статьёй. Вы всегда можете посмотреть справку по нужной вам команде, с помощью команды git help название-команды.

О других возможностях git я расскажу в последующих статьях.