[[A8R.ru]]
...
Основы Git

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

21.03.2024
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