Git
- Version Control System. Обратите внимание, что с октября 2020 года GitHub изменил название ветки по умолчанию с
masterнаmain.
Система контроля версий, которая позволяет осуществлять:
- Возврат к любой прошлой версии кода
- Просмотр истории изменений
- Восстановление любых данных.
- Совместная работа без риска потерять данные или перезаписать чужую работу.
- Можно пользоваться как через CLI, так и помощью спец. программ git-клиентов
Install
MacOS git install: brew install git
MacOS openssh install: brew install openssh
Настройка
git config --list- Показывает список конфигурацийgit config --global user.name "Evgeny Leukhin"- Установить глобальное имя пользователяgit config --global user.email "EvgenyLeukhin@yandex.ru"- Установить глобально адрес почты пользователяgit config --global push.default simple- Настройка команды git push. Будет пушить только в текущую веткуgit help <git_command>- Справочник для отдельных гит-команд
Репозиторий
git init (--bare)- Создать (только для истории, без файлов)git clone <path> (.)- Склонировать (в текущую директорию)git remote add <rep_name> <path>- Привязать удаленный репозиторийgit remote rm <rep_name>- Отвязать удаленный репозиторийgit remote -v- Посмотреть привязанные репозитории
Ветки
git branch (-v)- Показать все ветки репозитория (с инфой), текущую веткуgit branch <branch_name>- Создать новую веткуgit checkout <branch_name>- Переключиться в указанную веткуgit checkout -f <branch_name>- Переключиться фосированно в указанную ветку (с удалением зезакоммиченных изменений)git checkout (-b) <branch_name>- Создать новую ветку (и сразу переключиться в неё)git checkout -b <branch_name> <commit_hash>- Создать новую ветку (и сразу переключиться в неё) от указанного коммитаgit branch -d (-D) <branch_name>- Удалить указанную ветку (принудительно)git merge <branch_name>(--ff-only) - Сделать слияние указанной ветки с текущей (принудительно)git merge --abort- Отменить слияние
Изменения
git status- Статус файловgit commit -am "commit message"- Добавление измененных файлов в коммит и коммит (одновременно)git add <filename> <filename2>- Добавить указанные измененные файлы в индексgit add .||git add -A (--all)- Добавить все указанные измененные в индексgit restore <filename1> <filename1- Восстановить удаленный файлgit restore --staged <filename1> <filename1- Убрать файлы из индексаgit checkout <filename> <filename2>- Убрать указанные измененные файлы из коммитаgit checkout <filename> <commit_hash>- Вернуть состояние файла, какое оно было в указанном коммитеgit checkout -- .- Убрать измененния во всех файлахgit reset HEAD <filename>- Если случайно добавили файл, а потом решили, что нужно его убрать из коммита, но при этом не удалять в нём измененияgit rm (--cached) <filename>- Удалить файл из коммита и с диска (не удалять с диска), если случайно добавили ненужный файл в коммит и закоммитили его, далее выполнить команду нижеgit commit --amend --no-edit- Измнить последний коммит, без изменения сообщения, если удалялись или изменялись файлы в коммитеgit commit -m "<commit_message>"- Создать коммитgit commit --amend -m "<commit_message>"- Измнить коммит-сообщениеgit diff <filename>- Посмотреть непроиндексированные изменения (до git add)git diff --staged <filename>- Посмотреть проиндексированные изменения (после git add)git log (-3)- Получить список коммитов до текущего (последних трёх)git log --oneline- Получить список коммитов до текущего в одну строкуgit log --all- Получить всю историю (не толь ко до текущего)git log -p -3- ... с выводом диффа по каждому коммитуgit log --oneline --all --graph- Получить всю историю (с графиком)git cat-file -p <commit_hash>- Посмотреть информацию о коммитеgit checkout <commit_hash>- Переключиться в указанный коммитgit checkout <branch_name>- Переключиться в последний коммит указанной веткиgit reset <commit_hash> (--hard)- Сбросить историю до указанного коммита (принудительно)git reset --hard origin/main- Сбросить историю до той как в origin (нужно сделать fetch перед этим)git clean -f -d- Удалить лишние файлы
git show <commit_hash>- Посмотреть дифф в этом коммитеgit blame filename- Посмотреть историю изменений файлаgit grep import- Показать список файлов, где есть строка "import"
git checkout -b new-branch-name <new-branch-name>- Удалить лишние файлы
git revert comit_hash- Удалить изменеия комита в текущей в етке (будет создан новый коммит, который удаляет дифф указанного коммита)git revert comit_hash1 comit_hash2 comit_hash3- Удалить изменеия комитов в текущей ветке (будет создан новый коммит, который удаляет дифф указанного коммита)
Сбросить ветку до той, которая находится в romote. Допустим в вас локально есть какие-то неотправленные коммиты в ветке main и вы не хотите их отправлять и хотите сбросить до состояния, которое в репозитории:
git reset --hard origin/main- Удалить изменеия комитов в текущей ветке (будет создан новый коммит, который удаляет дифф указанного коммита)
Отправка / Принятие
git pull <remote_name> <branch_name>- Принять измененияgit push <remote_name> <branch_name>:<remote_branch_name> (-f)- Отправить изменения (принудительно)