
Основы Git
Git — это система контроля версий, которая позволяет отслеживать изменения в вашем коде с течением времени. Это очень мощный инструмент, который сейчас используется большинством разработчиков программного обеспечения. Это также отличный способ сотрудничать с другими разработчиками над одним проектом.
Содержание: |
Репозиторий
Репозиторий Git — это хранилище, в котором расположен ваш проект и его история. Это может быть локальное хранилище где-то на вашем компьютере или удаленное хранилище на сервисе типа GitHub или другом хостинге в Интернете. Репозиторий служит для отслеживания изменений в проекте, координации работы между несколькими людьми и отслеживания истории проекта.
Скажем, у вас на компьютере есть директория со всеми файлами вашего проекта. Когда вы инициализируете репозиторий Git в этой директории, Git создает скрытую поддиректорию под названием .git, в которой хранится вся информация о репозитории. Эта информация включает историю всех изменений, внесенных в репозиторий, а также его текущее состояние.
Коммит
Вы можете думать о коммите как о снимке вашего проекта в определенный момент времени. Правда, коммит содержит только информацию об изменениях, которые были внесены в репозиторий с момента последнего коммита. Он не содержит все файлы репозитория (если только это не первый коммит). Таким образом, каждый коммит — это небольшой кусочек истории репозитория, основанный на предыдущем коммите. Все они связаны между собой в цепочку, формируя историю изменений вашего проекта.
Ветка
Ветка — это параллельная версия репозитория. Ветки позволяют вам работать над отдельными функциями вашего проекта, не влияя на основную версию. Закончив работу над новой фичей, вы можете объединить эту ветку с основной версией проекта.
Windows. Проходим по этой ссылке, выбираем под вашу ОС (32 или 64 битную), скачиваем и устанавливаем.
Для Mac OS.:
#Если установлен Homebrew
brew install git
#Если нет, то вводим эту команду.
git --version
#После этого появится окно, где предложит установить Command Line Tools (CLT).
#Соглашаемся и ждем установки. Вместе с CLT установиться и git
Linux. Открываем терминал и вводим следующую команду.
# Debian или Ubuntu
sudo apt install git
# CentOS
sudo yum install git
Установка имени и электронной почты
git config --global user.name "Your Name"
git config --global user.email "your_email@whatever.com"
Имя ветки по умолчанию
git config --global init.defaultBranch main
Корректная обработка окончаний строк
Для пользователей Unix/Mac:
git config --global core.autocrlf input
git config --global core.safecrlf warn
Для пользователей Windows:
git config --global core.autocrlf true
git config --global core.safecrlf warn
Создадим наш первый репозиторий. Для этого пройдите в папку вашего проекта.
#Для Linux и MacOS путь может выглядеть так /Users/UserName/Desktop/MyProject
#Для Windows например С://MyProject
cd <путь_к_вашему_проекту>
#Инициализация/создание репозитория
git init
Теперь Git отслеживает изменения файлов вашего проекта. Но, так как вы только создали репозиторий в нем нет вашего кода. Для этого необходимо создать commit.
#Добавим все файлы проекта в нам будующий commit
git add .
#Или так
git add --all
#Если хотим добавить конкретный файл то можно так
git add <имя_файла>
Теперь создаем commit. Обязательно указываем комментарий.
#Не забываем про кавычки
git commit -m "<комментарий>"
Используйте команду git status, чтобы проверить текущее состояние репозитория.
git status
Вы увидите:
$ git status
On branch main
nothing to commit, working tree clean
Если после выполнения предыдущей команды вы видите On branch master вместо On branch main, это означает, что у вас немного устаревшая версия Git'а, которая не поняла нас, когда мы попросили установить имя ветки по умолчанию на main. В этом случае вы можете переименовать ветку в main с помощью следующей команды:
git branch -m master main
Команда проверки состояния сообщила, что коммитить нечего. Это означает, что в репозитории уже хранится текущее состояние рабочих файлов, и нет никаких изменений, которые могли бы ожидать записи.
Получение списка произведенных изменений — функция команды git log.
git log
Результат
$ git log
commit b7614c1aea1ffbc46400fe1a163842d6ec620a43
Author: Alexander Shvets <alex@githowto.com>
Date: Tue Nov 28 05:51:38 2023 -0600
Added HTML header
commit 46afaff2232fc3d564c40f65cb82e7e94839a1bb
Author: Alexander Shvets <alex@githowto.com>
Date: Tue Nov 28 05:51:38 2023 -0600
Added standard HTML page tags
Вот список коммитов в репозиторий, которые мы сделали.
Однострочная история
git log --pretty=oneline
Результат
$ git log --oneline
b7614c1 Added HTML header
46afaff Added standard HTML page tags
78433de Added h1 tag
5836970 Initial commit
Контроль отображения записей
Варианты просмотра истории:
git log --oneline --max-count=2
git log --oneline --since="5 minutes ago"
git log --oneline --until="5 minutes ago"
git log --oneline --author="Your Name"
git log --oneline --all
Существует огромное количество вариантов просмотра истории, вы можете порыться на странице руководства git-log, чтобы увидеть их все.
Пример формата лога
git log --pretty=format:"%h %ad | %s%d [%an]" --date=short
Результат
$ git log --pretty=format:"%h %ad | %s%d [%an]" --date=short
b7614c1 2023-11-28 | Added HTML header (HEAD -> main) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]
Давайте рассмотрим его в деталях:
--pretty="..." — определяет формат вывода.
%h — укороченный хеш коммита.
%ad — дата коммита.
| — просто визуальный разделитель.
%s — комментарий.
%d — дополнения коммита («головы» веток или теги).
%an — имя автора.
--date=short — сохраняет формат даты коротким и симпатичным.
Таким образом, каждый раз, когда вы захотите посмотреть лог, вам придется много печатать. К счастью, существует несколько опций конфигурации Git, позволяющих настроить формат вывода истории по умолчанию:
git config --global format.pretty '%h %ad | %s%d [%an]'
git config --global log.date short
Просмотрите историю изменений и найдите хеш первого коммита. Он должен быть в последней строке результата git log. Используйте этот хеш (достаточно первых 7 символов) в команде ниже.
git checkout <hash>
Вернитесь к последней версии в ветке main (Переключение веток)
git switch main
Слияние переносит изменения из двух веток в одну. Давайте вернемся к ветке style и сольем main со style.
git switch style
git merge main
git log --all --graph
Результат
$ git switch style
Switched to branch 'style'
$ git merge main
Merge made by the 'ort' strategy.
README | 1 +
1 file changed, 1 insertion(+)
create mode 100644 README
$ git log --all --graph
* a33deed 2023-11-28 | Merge branch 'main' into style (HEAD -> style) [Alexander Shvets]
|\
| * ee16740 2023-11-28 | Added README (main) [Alexander Shvets]
* | 0ee0113 2023-11-28 | Renamed hello.html; moved style.css [Alexander Shvets]
* | 903eb1d 2023-11-28 | Included stylesheet into hello.html [Alexander Shvets]
* | 555372e 2023-11-28 | Added css stylesheet [Alexander Shvets]
|/
* 9288a33 2023-11-28 | Added copyright statement with email [Alexander Shvets]
* b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
* 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets]
* 78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
* 5836970 2023-11-28 | Initial commit [Alexander Shvets]
Путем периодического слияния ветки main с веткой style вы можете переносить из main любые изменения и поддерживать совместимость изменений style с изменениями в основной ветке.
Однако, это делает графики коммитов действительно уродливыми.
Клон репозитория work
git clone work home
Клон удаленного репозитория
git remote add origin https://github.com/ИМЯПОЛЬЗОВАТЕЛЯ/РЕПОЗИТОРИЙ.git
Подробная информация
git remote show origin
Добавление удаленного репозитория
Добавить чистый репозиторий в качестве удаленного репозитория к нашему оригинальному репозиторию.
git remote add shared ../work.git
Узнать о локальных и удаленных ветках.
git branch
Список удаленных веток
git branch -a
Получить изменения из удаленного репозитория
git fetch
Слияние подтянутых изменений
git merge origin/main
Команда pull (подтянуть)
Команда fetch позволяет контролировать то, что именно подтягивается и сливается в ваши локальные ветки, но для удобства существует также команда pull, которая подтягивает и сливает изменения из удаленной ветки в текущую одним вызовом.
git pull
...эквивалентна следующим двум шагам:
git fetch
git merge origin/main
Передавать изменения в удаленный репозиторий
git push shared main