Git
August 9, 2021

Справка по Git

Распределённая система управления версиями

Скачать

https://git-scm.com/downloads

Основные команды

git init - проинициализировать репозиторий в текущей папке

git status - показывает текущий статус

git add - отслеживает изменения файлов
git add index.html - добавляет index.html
git add . - добавит в индекс все файлы, в которых были изменения, а также новые файлы

git commit - сохраняет изменения в коммит
git commit -m 'commit message' - создает коммит с сообщением
git commit –am 'commit message' - одновременно проиндексирует файлы (за которыми ведется слежка ) и закоммитит их

git push - заливает текущие локальные коммиты в удаленный репозиторий

git pull - забирает изменения с удаленного репозитория в локальный

git clone - клонирует проект с удаленного репозитория

git diff branch-1 branch-2 - отобразить различие между двумя ветками

git branch - показывает список веток
git branch branch-name - создает новую ветку branch-name
git branch –m OLD_branch-name NEW_branch-name - переименовывание ветки
git branch -d branch-name - удаляет ветку branch-name

git checkout - переключается на другую ветку
git checkout branch-name - переключается на последний коммит в ветке branch-name
git checkout -b branch-name - создает и переключается на ветку branch-name

git merge - совмещает текущую ветку с выбранной
git merge branch-name - совмещает текущую ветку с branch-name

git reset [commit] - отменить все изменения после указанного commit
git reset --hard [commit] - отменить все изменения после указанного commit с очисткой истории
git reset --soft HEAD~1 - отменить последний коммит и вернуть файлы коммита в состояние Index (Staging)

git restore --staged <file> - убрать файл из Index (Staging) в "измененные"
git restore <file> - отменить изменения файла в директории

git log --follow [file] - журнал изменений, отображает историю версий указанного файла
git log -3 --stat - информация о трех последних коммитах
git reflog - используется для записи всей истории, содержит информацию о всех выполненных и отмененных коммитах, предоставляет буфер на определенное время, в которое можно восстановить все, например удаление ветки, перебазирование, сброс.

git show [commit] - отобразить метаданные содержимого, относящегося к указанному commit

git config - конфигурация и параметры git
git config --global user.name - показывает имя пользователя
git config --global user.name 'new user' - изменяет имя пользователя
git config --global user.email - показывает email пользователя
git config --global user.email 'test@mail.ru' - изменяет email пользователя
git config --get remote.origin.url - показать адрес репозитория

git tag [commit id] - установить тэг на указанный commit
git tag -a <tag_name> -m "message" - установить тэг с аннотацией

Git Tag

git tag v3.1.1 develop - установить тег v3.1.1 на ветку develop
git push origin v3.1.1 - залить в репозиторий тег v3.1.1
git tag -d v3.1.1 - удалить тег v3.1.1 в локальной копии
git push --delete origin v3.1.1 - удалить тег v3.1.1 из удаленного репозитория

Git Stash

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

git stash --list - отобразить список изменений в stash
git stash show 0 - отобразить изменения в Stash
git stash show -p 0 - отобразить изменения и контект в нулевом Стэше
git stash apply 0 - вернуть изменения из Stash
git stash branch new-branch 0 - создать новую ветку из Stash
git stash pop - удалить последний Stash
git stash clear - очистить весь Stash

git remote set-url origin gitlab.antroot.ru/newrepo - задать (новый) URL для репозитория

git checkout -b <branch-name> - создать новыую ветку в локальном репозитории и переключиться на нее
git push <remote-name> <branch-name> - загрузить ветку в дальний репозиторий

git rm -r --cached . && git add . && git commit -am "Remove ignored files" - удалить файлы из нового файла .gitignore

git branch --merged >/tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d </tmp/merged-branches - удалить все локальные ветки, которых нет в дальнем репозитории

git fetch origin && git reset --hard origin/master - сброс локальной ветки до состояния дальней ветки

git reset --soft HEAD~3 && git commit - выполнить squash трех последних коммитов

Продвинутые команды Git

Отобразить сводку графа из всех веток в проекте:

git log --all --decorate --oneline --graph

То же самое можно добавить как alias lograf в конфигурацию:

git config --global alias.lograf "log --all --decorate --oneline --graph"

Отображение информации о конкретной контрольной точке: хэш коммита, автор, дата:

git show <commit hash>
git show HEAD
git show -stat <commit hash>

Отображение автора последнего изменения каждой строки в репозитории, с датой и хешем:

git blame filename.txt
git blame -L 2,4 filename.txt # диапазон строк для отображения
git blame -С <commit hash> filename.txt # хэш коммита

Архивирование определенного момента в истории репозитория Git:

git archive -o archive.zip master
git archive -o archive.zip <commit hash>

Перемещение файла в репозитории Git с отображением изменений:

git mv filename_old.txt filename_new.txt

Очистка репозитория Git от неотслеживаемых файлов и директорий:

git clean -n     # отображение предстоящих удалений
git clean -f     # удаление файлов
git clean -f -d. # удаление файлов и директорий

Удаление файлов и директорий из репозитория Git:

git rm filename.txt
git rm -r directoryname

Очистка неверных или устаревших ссылок в локальном репозитории Git:

git prune -n  # отображение предстоящих изменений
git prune

Отображение изменений в репозитории Git по авторам:

git shortlog

Проверка цифровой подписи GPG (GNU Privacy Guard) коммитов и тегов:

git verify-commit <commit hash>
git verify-tag <tag>

Состояние файлов в репозитории Git

Файлы в репозитории Git могут быть в трех состояниях:

  • Modified - изменен
  • Staged - после изменения файл заносится в эту область
  • Committed - файл считается примененным, когда из Staged он отправлен в репозиторий

Git hook

Для ускорения работы в Git присутствуют так называемые hook'и - это скрипты, которые срабатывают на действия с Git, которые располагаются в /.git/hooks/. Наиболее популярными являются

  • pre-commit - выполняется перед git commit
  • pre-push - выплолняется перед загрузкой изменений git push


> Шпаргалка по консольным командам Git


Посмотреть