# Git: Полезные команды Git: Удаляем Мусор, Конфликты, Фиксим commit-messages
___
Многие команды из списка реализованы в изпользуемых *Git UI тулах* (Git Extensions), но лучше юзать команды через консоль, чтобы понимать, что происходит "под капотом".
Тем более, что UI тулы могут дико тупить и делать не то.
Консоль -> :fire: :fire: :fire:
___
**1. Сборщик Мусора:**
```bash=
git gc
```
убирает лишние объекты в памяти. Fetch и Push теперь должны выполняться быстро, а не по 7-10 мин
**2. Откат коммита из локальной ветки:**
```bash=
git reset --soft HEAD^
```
**3. Поменять сообщение у запушенного коммита(например, если не отработал Left hook)**
-Откатываем коммит:
```bash=
git commit --amend
```
*amend - позволяет добавить к последнему коммиту новые изменения.*
Пруф: https://www.atlassian.com/git/tutorials/rewriting-history
- [ ] Потом обновляем коммит в удаленной ветке через:
`git push -f origin head`
или
Юзаем **cherry pick** (Draft - Нужно расписать)
**4. Показать текущую ветку (бывает полезно, когда подвисает Git tool в Visual Studio) и список измененных файлов**
```bash=
git status
```
**5. Показать список коммитов с информацией о них**
```bash=
git log --pretty=format:"%h%x09%an%x09%ad%x09%s
```
**6. Чтобы временно "спрятать" изменения при переключении между ветками**
```bash=
git stash (с опциями)
```
### Следующие команды надо применять внимательно, чтобы не потерять изменения:
8. изменение последнего коммита
```bash=
git commit --amend -
```
9. отмена изменений через создание нового коммита,
https://www.atlassian.com/git/tutorials/undoing-changes/git-revert
```bash=
git revert
```
10. сброс последних коммитов https://www.atlassian.com/git/tutorials/undoing-changes/git-reset .
```bash=
git reset (c опциями)
```
11. удаление локальной ветки. Сейчас может не потребоваться, но в текущей работе при активном создании своих и скачивании с репозитория чужих веток (например, для ревью) их количество разрастается, что может привести к путанице с добавлением коммитов (список локальных веток в консоли можно посмотреть через команду git branch --list)
```bash=
git branch -d <branch_name>
```
(список локальных веток в консоли можно посмотреть через команду
```bash=
git branch --list
```
**11.:biohazard_sign: Устранение конфликтов, если точно уверен, что их нет, но Git ругается:**
```bash=
git conflict resolved
```
**Note:** супер-редкий кейс и лучше просто так не использовать
###### tags: `Git` `draft`