Давно хотела оформить в виде статьи мой список часто используемых Git команд.
Git
Git — это распределенная система управления версиями. Создана для отслеживания изменений в коде и облегчения совместной работы над проектами. Я ее всегда использую, даже когда работаю над проектом одна.
Платформа Git
Я не пользуюсь платформами GitHub и GitLab. Я использую собственный Git сервис Gogs. Его установка и настройка подробно описаны в статье: «Установка Git сервиса Gogs на Linux (Debian 11)«.
Создание удаленного репозитория Git
Создание удаленного репозитория на разных платформах Git по сути не различается. У меня Gogs, поэтому пишу про Gogs.
В адресной строке браузера набираю https://git.adminkin.pro/ и ввожу логин и пароль пользователя.
Для создания нового репозитория нажимаю на + рядом с My Repositories:

Придумываю имя репозиторию (interview) и нажимаю кнопку Create Repository. Все! Удаленный репозиторий создан.

Часто используемые Git команды
На локальной машине переходим к проекту interview:
cd ~/interview/
Инициализируем локальный репозиторий:
git init
Создаем файл .gitignore:
touch .gitignore
Это обычный текстовый файл, в который вносится список файлов и директорий, которые Git должен игнорировать и не отслеживать изменения.
У меня проект interview на Python, и я добавляю в игнор все директории с именем __pycache__ с их содержимым:
echo "__pycache__/" >> .gitignore
Добавляем все файлы проекта в область подготовки к коммиту (стейдж):
git add .
Просматриваем текущее состояние репозитория:
git status

- On branch master — это текущая ветка.
- Changes to be committed — это файлы, которые уже в стейдже, т.е. в области подготовки к коммиту после git add, и готовы к коммиту.
- Changes not staged for commit — это измененные файлы, но еще не добавленные в стейдж через git add.
- Untracked files — это файлы, присутствующие в проекте, но неотслеживаемые Git.
Чтобы удалить файл из стейджа (если он был ошибочно добавлен с помощью git add):
git restore --staged <file>
Задаем автора коммитов для репозитория:
git config user.name "Irina K."
git config user.email "irina@email.email"
Чтобы просмотреть текущие настройки Git, включая user.name, user.email:
git config --list
Делаем коммит (снимок состояния проекта):
git commit -m "my first commit"
где my first commit
— это комментарий к коммиту.
Просматриваем список настроенных удаленных репозиториев с адресами для чтения и записи, привязанных к репозиторию:
git remote -v
Пока список пустой. Добавляем удаленный репозиторий, который мы создали в предыдущем разделе статьи:
git remote add origin https://git.adminkin.pro/<git_user>/interview.git
Отправляем локальный коммит в удаленный репозиторий:
git push -u origin master
Просмотр коммитов
Список коммитов в обратном хронологическом порядке:
git log
Для каждого коммита отобразятся: хеш коммита (уникальный идентификатор), автор коммита, дата коммита и комментарий коммита.
Список коммитов со списком файлов каждого коммита:
git log --name-status
Список файлов коммита можно просмотреть и другой коммандой:
git diff-tree --no-commit-id --name-only -r <commit_hash>
где <commit_hash>
— это хеш коммита.
Список файлов, которые изменялись между коммитами:
git diff --name-only <commit_hash_1> <commit_hash_2>
Просмотр изменений
Посмотреть изменения для коммита (все строки кода, которые были добавлены, изменены, удалены):
git log -p -1 <commit_hash>
Просмотреть все содержимое файла с изменениями, внесенными после последнего коммита:
git diff -U9999 <file>
где -U9999
означает: показывать до 9999 строк контекста вокруг каждого изменения. Таким образом будет показан весь файл с пометками изменений. По умолчанию показывается по 3 строки «до и после» изменений.
Получение отсутствующего файла
Чтобы получить файл, отсутствующий в локальном репозитории, с удаленного репозитория:
git checkout <file>
Отмена отслеживания файла
Чтобы удалить файл из удаленного репозитория Git и больше не отслеживать его, но оставить файл на диске (в рабочей директории):
git rm --cached <file>
После этой команды Git будет считать файл неотслеживаемым (untracked).
Независимая версия файла в удаленном репозитории
Чтобы оставить файл/директорию в удаленном репозитории Git, но не отслеживать:
git update-index --skip-worktree <file>
Так в удаленном репозитории Git будет собственная независимая версия файла/директории.
Добавление файла в сделанный коммит
Если был сделан коммит:
git commit -m "comment"
А файл forgotten_file не был добавлен в стейдж с помощью git add и, таким образом, не попал в коммит. А очень нужно сделать единый коммит с забытым файлом. Делается это двумя командами:
git add forgotten_file
git commit --amend
Добавление соавтора
Чтобы пользователь мог добавлять свои правки в ваш удаленный репозиторий, его нужно добавить в соавторы.
На сайте с Gogs (у меня это https://git.adminkin.pro/) переходим к нужному репозиторию, выбираем вкладку Настройки, а затем Сотрудничество.

В строке поиска набираем имя нужного пользователя и нажимаем кнопку Добавить нового соавтора. И проверяем, что у пользователя добавились права на запись.
Кроме прав на запись, пользователь должен быть активирован. Чтобы это проверить, заходим на сайт Gogs под учетной записью администратора, переходим в Панель администратора, в раздел Пользователи.

Нужный пользователь должен быть с «галочкой» Активирован.
Клонирование удаленного репозитория
Чтобы клонировать существующий удаленный репозиторий (т.е. создать локальную копию):
git clone https://git.adminkin.pro/<git_user>/interview.git
Вывод
А какие Git команды вы часто используете? Напишите в комментариях под статьей.
Комментарии