Git в повседневной разработке
          Git - это распределенная система контроля версий, которая позволяет эффективно управлять и отслеживать изменения в вашем коде. В этой инструкции мы рассмотрим основные команды Git, которые используются в повседневной работе разработчика.
Начало работы
Создание удаленного репозитория в GitHub
- Установка и настройка Git: Если у вас ещё не установлен Git, скачайте и установите его с официального сайта git-scm.com. После установки настройте Git, используя свои данные GitHub:
 
$ git config --global user.name "Ваше Имя" 
$ git config --global user.email "ваша@почта.com"- Установка GitHub CLI: Установите GitHub CLI с официального сайта cli.github.com.
 
# для Linux 
$ sudo apt-get update -y && sudo apt-get full-upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y 
 
$ sudo snap install gh 
# or 
$ sudo apt-get install gh- Аутентификация в GitHub через CLI: Авторизуйтесь в GitHub через CLI:
 
$ gh auth loginСледуйте инструкциям в командной строке для аутентификации.
- Инициализация локального репозитория Git: Перейдите в папку с вашим проектом и инициализируйте Git репозиторий:
 
cd путь/к/вашему/проекту 
git init 
git add . 
git commit -m "Начальный коммит"- Создание удалённого репозитория на GitHub: Используйте GitHub CLI для создания нового репозитория:
 
gh repo create имя_репозитория --public --source=.Выберите --public или --private, в зависимости от того, хотите ли вы, чтобы репозиторий был публичным или приватным. Флаг --source=. свяжет ваш локальный репозиторий с только что созданным удалённым репозиторием.
- Пуш кода в удалённый репозиторий: Наконец, отправьте ваш код в новый репозиторий:
 
git push -u origin mainЗдесь main - это название ветки. Если вы используете другое, замените его соответственно.
Клонирование репозитория
Прежде чем начать работу над проектом, клонируйте удаленный репозиторий с помощью команды git clone:
git clone <URL_репозитория>Здесь <URL_репозитория> - это URL вашего удаленного репозитория.
- Клонирование удаленного репозитория с указанием ветки 
dev: 
git clone -b dev <URL_репозитория>Создание и переключение на новую ветку
Для работы над конкретной задачей создайте новую ветку и переключитесь на нее:
git checkout -b feature-your_taskЗамените feature-your_task на название вашей ветки.
Работа с изменениями
Внесение изменений и коммит
Изменяйте код и добавляйте изменения в индекс с помощью git add, а затем делайте коммит с комментарием:
git add . 
git commit -m "Ваши комментарии к коммиту здесь"Отправка изменений на удаленный репозиторий
Отправьте ваши изменения на удаленный репозиторий в вашу ветку:
git push --set-upstream origin feature-your_taskПросмотр статуса репозитория
Проверка статуса вашего репозитория:
git statusУправление изменениями
Спрятать незакоммиченные изменения
Если вам нужно временно спрятать незакоммиченные изменения, воспользуйтесь stash:
git stashВозврат изменений из stash
Воспользуйтесь stash, чтобы вернуть ранее спрятанные изменения:
git stash popОтмена изменения после коммита
Чтобы отменить все изменения после последнего коммита в Git и вернуть рабочую директорию к состоянию последнего коммита, вы можете использовать команду:
git reset --hard HEADЭта команда вернет рабочую директорию к состоянию последнего коммита (HEAD) и удалит все несохраненные изменения.
Пожалуйста, будьте осторожны при использовании этой команды, так как она может привести к потере несохраненных изменений без возможности восстановления.
Слияние и обновление
Получение и слияние изменений из другой ветки
Чтобы получить изменения из другой ветки и объединить их с вашей, выполните следующие шаги:
git checkout dev # Переключитесь на нужную ветку 
git pull # Получите изменения из удаленного репозитория 
git checkout feature-your_task # Вернитесь на вашу ветку 
git merge dev # Объедините измененияПолучение и слияние с использованием rebase
Получение и слияние изменений из ветки dev :
git pull --rebase origin devЗамена данных из удалённого репозитория
Для замены данных в локальной ветке dev данными из удаленной ветки origin/dev, можете выполнить следующие шаги:
# Убедитесь, что вы находитесь в ветке dev: 
git checkout dev 
 
# Сбросьте вашу локальную ветку dev до состояния origin/dev: 
git reset --hard origin/dev 
 
#Получите обновления с удаленного репозитория: 
git pullТеперь ваша локальная ветка dev будет содержать те же данные, что и удаленная ветка origin/dev.
Убедитесь, что вы понимаете последствия этой операции, так как она перезапишет данные в вашей локальной ветке. Все незакоммиченные изменения будут утеряны.
Управление ветками
Удаление локальной ветки
После завершения задачи, удалите локальную ветку с помощью -d:
git branch -d feature-your_taskЕсли возникнут проблемы, используйте -D для принудительного удаления:
git branch -D feature-your_taskУдаление ветки на удаленном репозитории
Удаление ветки с именем <branch_name> на удаленном репозитории:
git push origin --delete <branch_name>Работа с .gitignore
Удаление файлов из индекса .gitignore
Удаление файла ./db.json из индекса (не из рабочей директории):
git rm --cached ./db.jsonПереиндексация файла .gitignore
Переиндексация файла .gitignore может понадобиться, если вы изменили файл .gitignore, и хотите, чтобы Git учел новые правила игнорирования файлов. Чтобы переиндексировать .gitignore, выполните следующие шаги:
# Удалите кэшированные файлы индекса: 
git rm -r --cached . 
 
# Добавьте файлы обратно в индекс: 
git add . 
 
#Сделайте коммит: 
git commit -m "Переиндексация .gitignore"Дополнительные операции
Работа с тегами
Теги используются для маркировки определенных моментов в истории разработки, например, релизов.
git tag -a v1.0.0 -m "Версия 1.0.0"Просмотреть все созданные теги можно командой:
git tagДля отправки локальных тегов на удаленный репозиторий используйте:
git push origin --tagsРабота с логами
История изменений и коммитов доступна через:
git logДля удобства чтения истории коммитов можно использовать параметры, например, --oneline для краткого вывода.
Использование .gitattributes
Файл .gitattributes позволяет определять настройки атрибутов файлов в репозитории, такие как лингвистические настройки или правила обработки концов строк.
Вот несколько примеров использования файла .gitattributes:
Нормализация концов строк:
Git может автоматически преобразовывать концы строк в CRLF (используется в Windows) при проверке файлов из репозитория и в LF (используется в Linux и macOS) при коммите. Чтобы включить эту функцию для всех текстовых файлов, добавьте следующую строку в .gitattributes:
* text=autoЕсли вы хотите, чтобы определенный файл всегда имел концы строк LF, даже в Windows, используйте:
*.sh text eol=lfЭто особенно полезно для скриптов, которые должны выполняться в Linux-окружении.
Определение типа файла:
Вы можете явно указать, какие файлы следует считать текстовыми, а какие - бинарными. Это полезно, когда Git неправильно определяет тип файла. Например, чтобы указать, что файлы с расширением .myext должны быть текстовыми:
*.myext textИли чтобы указать, что файлы с расширением .bin должны быть бинарными:
*.bin binaryИгнорирование различий в определенных файлах:
Можно настроить Git так, чтобы он игнорировал изменения в пробелах или вообще любые изменения в определенных файлах при сравнении версий. Например, чтобы игнорировать различия в пробелах для файлов .txt:
*.txt -diffИли чтобы использовать специальный драйвер diff для файлов определенного типа:
*.custom diff=customЗдесь custom - это имя драйвера diff, который должен быть определен в конфигурации Git.
Лингвистические настройки:
GitHub использует файл .gitattributes для определения, как подсчитывать статистику языков для репозитория. Например, чтобы исключить файлы из статистики:
*.gen linguist-generated=trueИли чтобы указать, что файлы определенного расширения должны быть классифицированы как написанные на определенном языке:
*.example linguist-language=JavaЭкспорт архива:
Git позволяет указать, какие файлы или директории должны быть исключены из архивов (например, .zip или .tar файлов), создаваемых командой git archive. Например, чтобы исключить директорию test/ и файл notes.txt из архивов:
test/ export-ignore 
notes.txt export-ignoreРабота с подмодулями
Git позволяет добавлять в репозиторий ссылки на другие репозитории как подмодули:
git submodule add <URL_подмодуля>После клонирования репозитория с подмодулями, их необходимо инициализировать и загрузить:
git submodule init 
git submodule updateЧерри-пикинг
Черри-пикинг это процесс выборочного применения одного или нескольких коммитов из одной ветки в другую. Это может быть полезно, когда вы хотите включить определенные изменения из одной ветки в другую, не проводя полное слияние или rebase всей ветки.
# Найти хэш коммита 
git log 
a1b2c3d4 
 
# Переключиться на целевую ветку 
git checkout develop 
 
# Применить коммит с помощью черри-пикинга 
git cherry-pick a1b2c3d4При выполнении черри-пикинга могут возникнуть конфликты, если изменения в коммите конфликтуют с текущим состоянием ветки. В таком случае Git остановит процесс черри-пикинга и попросит вас разрешить конфликты. После разрешения конфликтов и добавления изменений в индекс, вы можете продолжить черри-пикинг, используя команду:
git cherry-pick --continueЕсли вы решите отменить черри-пикинг, используйте команду:
git cherry-pick --abort