Псевдоніми (aliases) скорочують часті команди:
# ~/.gitconfig
[alias]
st = status -sb
co = switch
lg = log --graph --oneline --decorate --all
last = log -1 HEAD --stat
unstage = restore --staged
amend = commit --amend --no-edit
fixup = "!f() { git commit --fixup=$1 && GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash $1~1; }; f"
gone = "!git fetch -p && git branch -vv | awk '/: gone]/ {print $1}' | xargs -r git branch -D"
- звичайний псевдонім підставляє аргументи команди
git; !на початку - виконати команду оболонки, з функцією для аргументів. Такі команди виконуються з кореня репозиторію;git goneвище видаляє локальні гілки, чиї віддалені версії вже видалено.
Власні команди git-*: будь-який виконуваний файл git-назва у PATH стає підкомандою git назва. Для складної логіки це краще за довгі рядки в конфігурації: скрипт можна версіонувати, тестувати й поширювати в команді.
# ~/bin/git-pr-checkout
#!/bin/sh
git fetch origin "pull/$1/head:pr-$1" && git switch "pr-$1"
Налаштування, що заощаджують час:
[pull]
rebase = true # pull без merge-комітів
[push]
autoSetupRemote = true # перший push сам створює upstream
[rebase]
autoStash = true # stash/unstash навколо rebase
autoSquash = true # fixup! коміти автоматично стають на місце
updateRefs = true # оновлювати залежні гілки в стеку
[rerere]
enabled = true # пам'ятати розв'язання конфліктів
[fetch]
prune = true # прибирати видалені віддалені гілки
[diff]
algorithm = histogram # зрозуміліші diff-и
colorMoved = default # підсвічувати переміщені рядки
[merge]
conflictStyle = zdiff3 # показувати базову версію в конфліктах
[branch]
sort = -committerdate # свіжі гілки першими
[help]
autocorrect = prompt # пропонувати виправлення опечаток
Що враховувати:
- псевдоніми й налаштування персональні: в інструкціях для команди і в скриптах CI використовуйте повні стандартні команди;
zdiff3,updateRefs,autoSetupRemoteз'явилися у відносно нових версіях Git - перевірте версію на всіх машинах команди;- dotfiles-репозиторій з
~/.gitconfigдає однакове середовище на всіх ваших машинах.