2022-07-04
1252

Управление Git через командную строку

Редактирование конфига

При установке git в первую очередь нужно указать имя пользователя и email, для этого нужно ввести команды, со своими значениями
git config --global user.name "Name"
git config --global user.email example@example.com

Алиасы

Чтобы не вводить команды целиком можно создать их алиасы
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
после этого выполнение команд может осуществляться вводом соответствующего алиаса
git st

Создать локальный, клонировать удаленный репозиторий

Для создания локального репозитория нужно перейти в каталог и выполнить команду
git init
Для клонирования репозитория используется команда
git clone https://repo_name.git
ее можно выполнять без инициализации репозитория
Еще можно осуществить клонирование из локального репозитория
git clone /srv/git/project.git

Отслеживание (индексация) файлов

Файлы находятся в двух состояниях: отслеживаемые и не отслеживаемые. Отслеживаемые файлы — это те файлы, о которых знает Git.

После редактирования файла git будет его рассматривать как измененный, нужно проиндексировать изменения и зафиксировать (сделать commit).

Посмотреть состояние файлов можно командой
git status
или сокращенный вывод
git status --short
Для того чтобы начать отслеживать новый файл, используется команда
git add <file>
или чтоб начать отслеживать все добавленные файлы
git add .
Если после этого файл будет изменен, нужно снова сделать
git add .
чтобы изменения проиндексировались.

Коммиты

Перед коммитом все файлы, которые должны в него войти должны быть проиндексированы.

Коммит можно сделать командой
git commit
в этом случае откроется текстовый редактор (по умолчанию vim) и верхняя строка будет пустая, в нее нужно написать комментарий, затем сохранить и выйти командой :wq
Или без открытия текстового редактора указать комментарий в кавычках при выполнении команды
git commit -m "Message"
Чтобы ненужно было выполнять индексацию перед коммитом, можно указать ключ -a
git commit -a -m "Message"
в этом случае git автоматически индексирует все уже отслеживаемые файлы позволяя обойтись без git add.
Перейти к комиту по id
git checkout <commit-id>
Вернуться к верхнему коммиту
git switch -
Более предпочтительная команда для перемещения к коммиту это
git reset  <commit-id>
при этом коммиты, которые были сделаны после него пропадают из лога, но изменения и индексация не отменяются, отменяется сам коммит
Если нужно вернуться к тому коммиту, с которого было произведено перемещение, его можно посмотреть в выводе команды
git reflog
последние действия отображаются вверху, с номером 0.
Если нужно перейти к коммиту и чтоб при этом пропали изменения которые были сделаны после этого коммита, нужно выполнить команду
git reset --hard  <commit-id>
Удалить последний коммит
git reset HEAD~

История коммитов

История коммитов выводится в обратном порядке (последние сверху) по команде
git log
Выводит только последний коммит
git log -1
Выводит сразу список изменений у каждого коммита
git log -p
Каждый коммит одной строкой
git log --pretty=oneline
Выводит граф, показывающий текущую ветку и историю слияний
git log --graph
Выведет лог по указанной ветке
git log <branch>
Выведет лог с коммитами в каждой строке
git log --oneline
Выведет лог со всеми параметрами
git log --oneline --decorate --graph --all

Удаление файлов

Для того чтобы удалить файл из Git, необходимо удалить его из отслеживаемых файлов, а затем выполнить коммит. Это позволяет сделать команда, которая также удаляет файл из рабочего каталога
git rm <file>
в эту команду можно передавать файлы, каталоги и шаблоны
Можно удалить файл из индекса, оставив его при этом в рабочем каталоге командой
git rm --cached <file>

Отмена действия

Отмена индексации файла (то есть команды git add)
git restore --staged <file>
Отмена незакоммиченых изменений файла, состояния файла будет как в последнем коммите
git restore <file>
Отмена всех незакоммиченых изменений, состояние будет как в последнем коммите
git restore .

Ветки

Ветка — это файл, содержащий хэш коммита, на который она указывает. При этом файлы проекта не копируются.

Создание/переключение/слияние

Создание ветки
git branch <branch>
Переключение на ветку
git switch <branch>
Создание ветки и переход в нее
git switch -c <branch>
После окончания работы над веткой ее нужно слить с основной, для этого нужно перейти на основную ветку
git switch main
и сделать merge, при этом указать ветку которую нужно влить
git merge <branch>
Если ветка больше не нужна ее можно удалить командой
git branch -d <branch>
Если сделать две ветки, работать в одной из них, потом сделать merge в мастер, то в другой ветке этих изменений не будет, если нужно чтоб эти изменения появились в другой ветке, то нужно сделать merge из мастера или из первой ветки
git switch <branch>
git merge main

Копирование коммита из одной ветки в другую

Можно скопировать коммит из одной ветки в другую. Для этого нужно найти нужный коммит в ветке из которой нужно взять коммит, переключится на ветку, в которую должен быть добавлен коммит и выполнить команду
git cherry-pick  <commit-id>

Вывод веток

Вывод списка веток
git branch
Вывод последнего коммита на каждой из веток
git branch -v
Вывод слитых/не слитых веток с текущей
git branch --merged
git branch --no-merged
Вывод всех веток, включая ветки удаленных репозиториев
git branch --all

Удаление

Удаление ветки если изменения из нее слиты
git branch -d <branch>
Удаление ветки со всеми наработками если изменения из нее не слиты
git branch -D <branch>
Удаление ветки в удаленном репозитории
git push origin --delete <branch>

Переименование

Переименование ветки локально
git branch --move <old-name> <new-name>
Отправка переименования на удаленный репозиторий
git push --set-upstream <remote-name> <new-name>
Старая ветка остается на удаленном репозитории, ее можно удалить
git push origin --delete <old-name>

Удаленные репозитории

origin - имя по умолчанию для удаленного репозитория.

Просмотр подключенных удаленных репозиториев
git remote
Вывод адресов удаленных репозиториев
git remote -v
Добавление удаленного репозитория
git remote add <remote-name> <address>
Просмотр удаленного репозитория (вывод адреса репозитория и его веток)
git remote show <remote-name>
Отключение от репозитория, при этом все отслеживаемые ветки и настройки, связанные с этим репозиторием, так же будут удалены
git remote remove <remote-name>
Переименование удалённого репозитория
git remote rename <remote-name> <new-remote-name>
Получение данных, которых еще нет в локальном репозитории, но без слияния их с локальными данными
git fetch <remote-name>
После fetch нужно выполнить команду для слияния
git merge <remote-name>/main
Получение данных из удаленного репозитория и слияние их с локальными
git pull
Вывод размера репозитория, строка size содержит размер в килобайтах
git count-objects -v