Полезные команды 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