Этот шпаргалка кратко описывает часто используемые команды Git для быстрой справки.
Создать новый локальный репозиторий
$ git init [имя проекта]
Клонировать репозиторий
$ git clone git_url
Клонировать репозиторий в указанную директорию
$ git clone git_url моя_папка
Показать изменённые файлы в рабочем каталоге, подготовленные для следующего коммита
$ git status
Добавить файл в индекс (staging)
$ git add [файл]
Добавить все изменённые файлы в индекс
$ git add .
Зафиксировать все подготовленные файлы в истории версий
$ git commit -m "сообщение коммита"
Зафиксировать все отслеживаемые файлы в истории версий
$ git commit -am "сообщение коммита"
Отменить изменения в рабочем каталоге, не подготовленные к коммиту
$ git restore [файл]
Убрать файл из индекса
$ git restore --staged [файл]
Убрать файл из индекса, сохранив изменения
$ git reset [файл]
Откатить всё к последнему коммиту
$ git reset --hard
Показать разницу между изменениями и индексом
$ git diff
Показать разницу между индексом и последним коммитом
$ git diff --staged
Применить коммиты текущей ветки поверх указанной
$ git rebase [ветка]
Задать имя, которое будет прикреплено к вашим коммитам и тегам
$ git config --global user.name "имя"
Задать email, который будет прикреплён к вашим коммитам и тегам
$ git config --global user.email "email"
Включить цветной вывод Git
$ git config --global color.ui auto
Открыть глобальный конфигурационный файл в редакторе
$ git config --global --edit
Показать все локальные ветки
$ git branch
Показать все ветки, локальные и удалённые
$ git branch -av
Переключиться на my_branch
и обновить рабочий каталог
$ git checkout my_branch
Создать новую ветку new_branch
$ git checkout -b new_branch
Удалить ветку my_branch
$ git branch -d my_branch
Слить ветку branchA
в branchB
$ git checkout branchB
$ git merge branchA
Добавить тег к текущему коммиту
$ git tag my_tag
Показать историю коммитов для активной ветки
$ git log
Показать коммиты в branchA
, которых нет в branchB
$ git log branchB..branchA
Показать коммиты, изменившие файл (даже после переименования)
$ git log --follow [файл]
Показать разницу между ветками
$ git diff branchB...branchA
Показать любой объект Git в читаемом виде
$ git show [SHA]
Загрузить все ветки с удалённого репозитория
$ git fetch [псевдоним]
Слить удалённую ветку с текущей
$ git merge [псевдоним]/[ветка]
# Без fast-forward
$ git merge --no-ff [псевдоним]/[ветка]
# Только fast-forward
$ git merge --ff-only [псевдоним]/[ветка]
Отправить локальные коммиты на удалённый репозиторий
$ git push [псевдоним] [ветка]
Загрузить и слить изменения с отслеживаемой ветки
$ git pull
Слить конкретный коммит из другой ветки
$ git cherry-pick [id_коммита]
Добавить URL репозитория как псевдоним
$ git remote add [псевдоним] [url]
Показать имена настроенных удалённых репозиториев
$ git remote
Показать имена и URL удалённых репозиториев
$ git remote -v
Удалить удалённый репозиторий
$ git remote rm [имя]
Изменить URL удалённого репозитория
$ git remote set-url origin [git_url]
Сохранить текущие изменения и подготовленные файлы
$ git stash
Показать список сохранённых изменений
$ git stash list
Применить верхний stash
$ git stash pop
Удалить верхний stash
$ git stash drop
Удалить файл из проекта и подготовить удаление к коммиту
$ git rm [файл]
Переместить файл и подготовить перемещение
$ git mv [старый_путь] [новый_путь]
Показать логи коммитов с информацией о перемещённых файлах
$ git log --stat -M
/logs/*
# "!" значит не игнорировать
!logs/.gitkeep
/# Игнорировать системные файлы Mac
.DS_store
# Игнорировать папку node_modules
node_modules
# Игнорировать конфигурацию SASS
.sass-cache
Файл .gitignore
указывает файлы и папки, которые Git должен игнорировать
Найти изменения по содержимому
$ git log -S'<слово_в_коде>'
Показать изменения конкретного файла со временем
$ git log -p <имя_файла>
Красивое визуальное отображение лога
$ git log --pretty=oneline --graph --decorate --all
Показать все ветки и их upstream
$ git branch -vv
Быстро переключиться на предыдущую ветку
$ git checkout -
Показать только удалённые ветки
$ git branch -r
Взять один файл из другой ветки
$ git checkout <ветка> -- <файл>
Переписать сообщение последнего коммита
$ git commit --amend -m "новое сообщение"
Изменить последний коммит без изменения сообщения
$ git commit --amend --no-edit
См. также: Rewriting history
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
См. также: More Aliases
Создать новый подмодуль в репозитории:
$ git submodule add <url_репозитория> <путь>
Клонировать репозиторий и инициализировать его подмодули:
$ git clone --recursive <url_репозитория>
Обновить все подмодули до последних коммитов:
$ git submodule update
Загрузить последние изменения подмодулей:
$ git submodule update --remote
Удалить подмодуль из репозитория:
$ git submodule deinit <путь>
$ git rm <путь>
$ git commit -m "Удалён подмодуль"
Cherry-pick позволяет применить конкретный коммит из одной ветки в другую.
$ git cherry-pick <хеш_коммита>
Показать историю изменений HEAD и веток:
$ git reflog
Найти хеш потерянного коммита или ветки и вернуть его:
$ git checkout <хеш_коммита_или_ветки>