git config --global user.name user
git config --global user.email user@mail.ru
git config --list
git init
git status
git add --all
git add .
git commit -m "Описание коммита"
git log --oneline
ssh -T git@github.com
git remote add origin git@github.com:User/project.git
git remote -v
git push -u origin main
git push
git commit --amend --no-edit
git commit --amend -m "Новое сообщение"
git restore example.txt
git restore --staged example.txt
git reset --hard b576d89
git diff
git diff --staged
git diff b576d89 t536d84
git status --ignored
git clone git@github.com:YandexPraktikum/first-project.git
(от англ. clone, «клон», «копия») — склонируй репозиторий с URL first-project.git из аккаунта YandexPraktikum на мой локальный компьютер.
git branch feature/the-finest-branch
(от англ. branch, «ветка») — создай ветку от текущей с названием feature/the-finest-branch;
git checkout -b feature/the-finest-branch
— создай ветку feature/the-finest-branch и сразу переключись на неё.
git branch
(от англ. branch, «ветка») — покажи, какие есть ветки в репозитории и в какой из них я нахожусь (текущая ветка будет отмечена символом *);
git checkout feature/br
— переключись на ветку feature/br.
git diff main HEAD
(от англ. difference, «отличие», «разница») — покажи разницу между веткой main и указателем на HEAD;
git diff HEAD~2 HEAD
— покажи разницу между тем коммитом, который был два коммита назад, и текущим.
git branch -d br-name
— удали ветку br-name, но только если она является частью main;
git branch -D br-name
— удали ветку br-name, даже если она не объединена с main.
git merge main
(от англ. merge, «сливать», «поглощать») — объедини ветку main с текущей активной веткой.
git push -u origin my-branch
(от англ. push, «толкнуть», «протолкнуть») — отправь новую ветку my-branch в удалённый репозиторий и свяжи локальную ветку с удалённой, чтобы при дополнительных коммитах можно было писать просто git push без -u;
git push my-branch
— отправь дополнительные изменения в ветку my-branch, которая уже существует в удалённом репозитории;
git pull
(от англ. pull, «вытянуть») — подтяни изменения текущей ветки из удалённого репозитория.
Feature branch workflow
Самый популярный подход к работе с Git в команде — это feature branch workflow. В нём создают ветку для каждой задачи (например, для новой функциональности или исправления бага), а когда всё готово, вливают новую ветку в main.
Важные этапы этого процесса — пул-реквест и ревью изменений.
Пул-реквест — это интерфейс, в котором можно обсудить изменения. Ревью — просмотр изменений другими участниками и один из способов проверить качество таких изменений.
Если вы уже участник проекта (или collaborator в терминах GitHub), можно клонировать репозиторий напрямую. А если нет, нужно предварительно сделать «форк». Также для участников доступна кнопка Merge после ревью, а для неучастников — нет. \
Когда один и тот же файл меняется в нескольких ветках, при их слиянии может произойти конфликт. Пугаться конфликтов не нужно, это нормальная часть работы с системами контроля версий. IDE, вроде VSCode или Intellij IDEA, помогут «склеить» файл из двух конфликтующих версий.
git checkout -b my-task-branch-name .git push --set-upstream origin HEAD или git push -u origin my-task-branch-name .git checkout main && git pull .git checkout my-task-branch-name && git merge main .git commit --no-edit или git commit -m 'merge main' .git push своей ветки.git checkout main && git pull .Открыть проект в IDE (VS Code, IDEA или другие).
Открыть файл, в котором есть конфликт.
Выбрать, какие части файла нужно взять из одной ветки, а какие — из другой.
Когда конфликты разрешены, сделать коммит: git commit --no-edit или git commit -m 'merge branch <название ветки>' .
Настройка информации о пользователе для всех локальных репозиториев
$ git config --global user.name "[имя]"
Устанавливает имя, которое будет отображаться в поле автора у выполняемых вами коммитов
$ git config --global user.email "[адрес электронной почты]"
Устанавливает адрес электронной почты, который будет отображаться в информации о выполняемых вами коммитах
Создание нового репозитория или получение его по существующему URL-адресу
$ git init [название проекта]
Создаёт новый локальный репозиторий с заданным именем
$ git clone [url-адрес]
Скачивает репозиторий вместе со всей его историей изменений
Просмотр изменений и создание коммитов (фиксация изменений)
$ git status
Перечисляет все новые или изменённые файлы, которые нуждаются в фиксации
$ git diff
Показывает различия по внесённым изменениям в ещё не проиндексированных файлах
$ git add [файл]
Индексирует указанный файл для последующего коммита
$ git diff --staged
Показывает различия между проиндексированной и последней зафиксированной версиями файлов
$ git reset [файл]
Отменяет индексацию указанного файла, при этом сохраняет его содержимое
$ git commit -m "[сообщение с описанием]"
Фиксирует проиндексированные изменения и сохраняет их в историю версий
Именованные серии коммитов и соединение результатов работы
$ git branch
Список именованных веток коммитов с указанием выбранной ветки
$ git branch [имя ветки]
Создаёт новую ветку
$ git switch -c [имя ветки]
Переключается на выбранную ветку и обновляет рабочую директорию до её состояния
$ git merge [имя ветки]
Вносит изменения указанной ветки в текущую ветку
$ git branch -d [имя ветки]
Удаляет выбранную ветку
Перемещение и удаление версий файлов репозитория
$ git rm [файл]
Удаляет конкретный файл из рабочей директории и индексирует его удаление
$ git rm --cached [файл]
Убирает конкретный файл из контроля версий, но физически оставляет его на своём месте
$ git mv [оригинальный файл] [новое имя]
Перемещает и переименовывает указанный файл, сразу индексируя его для последующего коммита
Исключение временных и вторичных файлов и директорий
*.log
build/
temp-*
Git будет игнорировать файлы и директории, перечисленные в файле .gitignore с помощью wildcard синтаксиса
$ git ls-files --others --ignored --exclude-standard
Список всех игнорируемых файлов в текущем проекте
Сохранение и восстановление незавершённых изменений
$ git stash
Временно сохраняет все незафиксированные изменения отслеживаемых файлов
$ git stash pop
Восстанавливает состояние ранее сохранённых версий файлов
$ git stash list
Выводит список всех временных сохранений
$ git stash drop
Сбрасывает последние временно сохранённыe изменения
Просмотр и изучение истории изменений файлов проекта
$ git log
История коммитов для текущей ветки
$ git log --follow [файл]
История изменений конкретного файла, включая его переименование
$ git diff [первая ветка]...[вторая ветка]
Показывает разницу между содержанием коммитов двух веток
$ git show [коммит]
Выводит информацию и показывает изменения в выбранном коммите
Удаление ошибок и корректировка созданной истории
$ git reset [коммит]
Отменяет все коммиты после заданного, оставляя все изменения в рабочей директории
$ git reset --hard [коммит]
Сбрасывает всю историю вместе с состоянием рабочей директории до указанного коммита.
Регистрация удалённого репозитория и обмен изменениями
$ git fetch [удалённый репозиторий]
Скачивает всю историю из удалённого репозитория
$ git merge [удалённый репозиторий]/[ветка]
Вносит изменения из ветки удалённого репозитория в текущую ветку локального репозитория
$ git push [удалённый репозиторий] [ветка]
Загружает все изменения локальной ветки в удалённый репозиторий
$ git pull
Загружает историю из удалённого репозитория и объединяет её с локальной. pull = fetch + merge
