Полезные команды Git - mcodex

Полезные команды Git

Содержание

Не отслеживать изменение прав

git config core.fileMode false

Исправить описание в последнем коммите

git commit --amend -m "New commit message"

Анализ проекта

# Какие файлы меняются чаще всего
git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20

# Все контрибьюторы отсортированные по числу коммитов
git shortlog -sn --no-merges

# Кто активен за последние полгода
git shortlog -sn --no-merges --since="6 months ago"

# Количество коммитов помесячно
git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c

#Где скапливаются баги, отфильтровано по коммитам с ключевыми словами
git log -i -E --grep="fix|bug|broken" --name-only --format='' | sort | uniq -c | sort -nr | head -20

# Как часто делаются revert/hotfix
git log --oneline --since="1 year ago" | grep -iE 'revert|hotfix|emergency|rollback'

Изменить удаленный репозиторий
Проект склонирован через https, нужно изменить на ssh

# текущее состояние
git remote -v
#origin https://gitlab.com/my-username/my-project.git (fetch)
#origin https://gitlab.com/my-username/my-project.git (push)


# замена
git remote set-url origin git@gitlab.com:my-username/my-project.git

# проверка
git remote -v
# origin git@gitlab.com:my-username/my-project.git (fetch)
# origin git@gitlab.com:my-username/my-project.git (push)

Тэги

# просмотреть список тэгов
git tag

# посмотреть информацию по конкретному тэгу
git show 1.2.4

# добавить тэг
git tag -a v1.0 -m "version 1.0"

# тэги по умолчанию не пушатся в удаленный репозиторий. 
# запушить конкретный тэг 
git push origin v1.1

# запушить все тэги 
git push origin --tags

# запушить коммит с новым тэгом 
git push --follow-tags

# можно тэгом помечать ранее сделанный коммит.
# смотрим лог коммитов с хэшами: 
git log --pretty=oneline

# берем первые 7 символов хэша нужного коммита и ставим тэг
git tag -a v1.0 -m "release v1.0" 700b806

История изменений

# история коммитов в виде дерева
git log --pretty=oneline --graph

# вывод информации по изменениям, которые внесли коммиты (список файлов)
git log --stat

# изменения в последних 2-х коммитах
git log -p -2 

# не показывать коммиты слияния
git log --no-merges 

# +фильтр по автору
git log --stat --no-merges --author=johndoe

git log -- path/to/file

# изменения в конкретном файле
# красный - что было
# зеленый - что стало 
git log -p --no-merges --author=johndoe -- resources/views/en/page.blade.php

# изменения в последнем коммите
git log -p -1 -- resources/views/en/page.blade.php

# или
git diff branch1 branch2 

# какие есть коммиты в ветке develop, которых нет в main
# можно выполнять как в develop, так и в main
git log develop --not main 

# какие изменения будут внесены из develop в main
git log develop -p main

# кто и когда делал изменения каждой строки файла
git blame resources/views/home.blade.php

# сколько строк измененено в каждом файле 
# + добавлено, - удалено
git diff --stat

Переименование ветки

В локальном репозитории есть ветка, в ней коммиты, ветка запушена в origin. Необходимо переименовать и локальную и удаленную ветки.

# переименовываем локальную ветку
git branch -m новое-имя

# пушим переименованную ветку
git push origin -u новое-имя

# удаляем старую ветку из origin
git push origin --delete старое-имя

Условные обозначения изменений в тексте коммита


| Тип      | Значение                               | Пример                            |
| -------- | -------------------------------------- | --------------------------------- |
| feat     | новая функциональность                 | feat: add user registration       |
| fix      | исправление ошибки                     | fix: fix captcha validation       |
| refactor | изменение кода без изменения поведения | refactor: simplify user resolver  |
| docs     | документация                           | docs: add API authentication docs |
| test     | добавление/изменение тестов            | test: add login feature tests     |
| style    | форматирование, пробелы, lint и т.п.   | style: fix code formatting        |
| chore    | технические/служебные изменения        | chore: update dependencies        |
| perf     | улучшение производительности           | perf: optimize task queries       |
| build    | изменения системы сборки               | build: update Vite config         |
| ci       | изменения CI/CD                        | ci: add GitLab pipeline           |
| revert   | отмена предыдущего коммита             | revert: revert feat: add caching  |