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 я расскажу в последующих статьях.