# GIT Шпаргалка
Изучите GIT: https://learngitbranching.js.org/
## Содержание
- [Cherry-pick](#cherry-pick)
- [Stash](#stash)
- [Remote, Fetch, Pull, Push](#remote-fetch-pull-push)
- [Pull](#pull)
- [Push](#push)
- [Merge, Rebase](#merge-rebase)
- [Checkout, Branch](#checkout-branch)
- [Add, Commit, Status, Show](#add-commit-status-show)
- [Log](#log)
- [Search in Log](#search-in-log)
- [Tagging](#tagging)
- [Clone, Init (Create Repo)](#clone-init-create-repo)
- [Config - (Settings, Setup, Option)](#config---settings-setup-option)
- [Tracking (rm mv)](#tracking-rm-mv)
- [Revert](#revert)
- [Reset](#reset)
- [Reflog](#reflog)
- [Grep (Search)](#grep-search)
- [Submodules](#submodules)
- [GIT Config Best Setup](#git-config-best-setup)
## Cherry-pick
**Примечание:** cherry-pick из одной ветки в другую невозможен, вам всегда нужно переключиться на нужную ветку (checkout).
### Примеры
- Перенос коммита из ветки "feature" в ветку "main":
```bash
git checkout main
git cherry-pick abc123
-
Перенос нескольких несмежных коммитов:
git cherry-pick abc123 def456 ghi789
-
Перенос диапазона коммитов:
git cherry-pick abc123..def456
-
Разрешение конфликтов (если они возникли):
git cherry-pick --continue
-
Отмена cherry-pick:
git cherry-pick --abort
Stash
По умолчанию Git пропускает неотслеживаемые или игнорируемые файлы при использовании stash.
Команды
-
Сохранить измененные/подготовленные файлы:
git stash
-
Сохранить измененные/подготовленные/неотслеживаемые файлы:
git stash -u
-
Сохранить измененные/подготовленные/неотслеживаемые/игнорируемые файлы:
git stash -a
-
Сохранить изменения с сообщением:
git stash save "сообщение о сохранении"
-
Показать все доступные stashes:
git stash list
-
Восстановить последние изменения и удалить stash:
git stash pop
-
Восстановить указанные изменения без удаления stash:
git stash apply stash@{1}
-
Восстановить удаленный stash, зная его хэш:
git stash apply [stash-hash]
-
Удалить stash:
git stash drop
-
Показать различия в последнем stash:
git stash show stash@{1}
Remote, Fetch, Pull, Push
Эти команды помогают загружать обновления из другого репозитория и обновлять локальный репозиторий.
Команды
-
Добавить удалённый репозиторий:
git remote add [псевдоним] [URL]
-
Загружать все ветки из удаленного репозитория:
git fetch
-
Загружать и удалять локальные ветки, которые отсутствуют в удаленном репозитории:
git fetch --prune
Pull
Команды
-
Получить и слить коммиты из текущей отслеживаемой удаленной ветки:
git pull
-
Получить и слить с удаленного репозитория с удалением несуществующих веток:
git pull --prune
-
Запросить изменения только в том случае, если они могут быть «fast-forward» (без создания новых коммитов):
git pull --ff-only
Push
Команды
-
Отправить текущую ветку на удаленный репозиторий:
git push
-
Отправить текущую ветку и установить отслеживаемую ветку:
git push --set-upstream origin HEAD
-
Отправить локальные коммиты на удаленную ветку:
git push origin [ветка]
Merge, Rebase
Merge
- Слить указанную ветку в текущую:
git merge [ветка]
Rebase
- Применить изменения из текущей ветки на указанную ветку:
git rebase [ветка]
Checkout, Branch
Checkout
-
Переключиться на другую ветку:
git checkout branch_name
-
Создать новую ветку и сразу переключиться на неё:
git checkout -b new_branch_name
Branch
-
Показать все локальные ветки:
git branch
-
Создать новую ветку из текущего коммита:
git branch [имя-ветки]
-
Переименовать ветку:
git branch --move [старое-имя] [новое-имя]
Add, Commit, Status, Show
Commit
- Зафиксировать изменения с сообщением:
git commit -m "ваше сообщение коммита"
Status
- Показать измененные файлы в рабочем каталоге, которые готовятся к следующему коммиту:
git status
Log
- Показать историю коммитов в текущей ветке:
git log
Search in Log
- Найти изменения с определенной строкой:
git log -S "поисковый_термин"
Tagging
-
Показать все теги:
git tag
-
Создать новый тег:
git tag v1.0
Clone, Init (Create Repo)
-
Создать локальный Git репозиторий:
git init
-
Клонировать удаленный репозиторий:
git clone
Config - (Settings, Setup, Option)
Remote
-
Показать удалённые URLs:
git remote -v
-
Изменить URL удаленного репозитория:
git remote set-url origin [новый_URL]
List
- Показать все настройки:
git config --list
Tracking (rm mv)
- Удалить файл из проекта и подготовить удаление для коммита:
git rm [файл]
Revert
- Создать новый коммит, в котором будут отменены все изменения определенного коммита:
git revert [коммит]
Reset
- Сбросить последние два коммита:
git reset HEAD~2
Reflog
- Лог всех обновлений ссылок (например, checkout, reset):
git reflog
Grep (Search)
- Искать в рабочем каталоге:
git grep -n поиск_запроса
Submodules
- Инициализировать все подмодули:
git submodule update --init
GIT Config Best Setup
Эти настройки помогут вам настроить Git для лучшей производительности.
[core]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[push]
default = simple