Всякие git хаки

Разделение настроек

У гита есть 2 вида настроек:

  • локальные - определяются в .git/config
  • глобальные - определяются либо в .config/git/config, либо в .gitconfig

Если нужно сделать глобальные настройки для определнных репозиториев, можно воспользоваться диррективой includeIf. В глобальные настройки гита добавляем следующее:

[includeIf "gitdir:~/Projects/work/"]
    path = ~/Projects/work/.gitconfig

Теперь если мы находимся в дирректории work, будут подключены настройки спецефичные для данных проектов

удалить файл из git repo

git filter-repo -f --index-filter 'git rm --cached --ignore-unmatch unwanted-file.txt'

после этого надо пушить с форсом:

git push --force -u origin main

Перезапись автора коммитов

Перезапись с определенного коммита

git rebase -r --root --exec "git commit --amend --no-edit --reset-author"

Перезапись всех коммитов

git rebase -r --root --exec "git commit --amend --no-edit --reset-author

❗ Если во время перезаписи будут происходить какие-то махинации с gitconfig, нужно автора прописать в локальные настройки

Подсчет колличества строк в репозитории

git ls-files | xargs cloc

Git home config

alias home='git --work-tree=$HOME --git-dir=$HOME/.cfg'