Git в повседневной разработке

Git в повседневной разработке

Картинка к публикации: 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

Читайте также:

ChatGPT
Eva
💫 Eva assistant