8xx8 (Андрей Кулаков)

Творческая мастерская

Будь ленив и быстр. Git

| Comments

1
2
cat ~/.zsh_history | wc -c
431403

Столько символов я использовал, набирая различные команды в консоли.

Не знаю как вам, а я думаю, это много. Даже если учесть, что половину из этого занимают пути к файлам и части, дополненные автокомплитом, это все равно много. Статистика взята примерно за 4 месяца, и если выкинуть выходные и прикинуть, получается около 6000 знаков в день. Пара страниц формата А4. Большая часть этого труда – это рутинные команды или последовательности типичных действий.

Как ни странно, но это одна из немногих ситуаций в жизни, когда можно делать минимум, а результата получать максимум.

Помогут в этом знания полезных программ, приготовленные в функции и автодополнения, поданные под нужным соусом из псевдонимов. Но путь ленивых и быстрых не для новичков. Существует опасность получить «алиас головного мозга» или «расстройство отсутствия плагина», совершено забыв о том, что где-то в недрах вашего блюда есть то, что имеет совершенно другую начинку.

Погружение на темную сторону можно разделить на несколько частей. Согласно сложности реализации и абстрагированности от реальной жизни.

Git

Не секрет, что git обладает продвинутым и гибким интерфейсом командной строки, но эта гибкость достигается дорогой ценой, а именно многословностью. В результате для выполнения некоторых простых действий требуется вводить немалое количество слов в командной строке.

На этапе знакомства с системой это даже хорошо, помогает вникнуть. Но в повседневной работе набирать раз за разом небольшой эпос в командной строке, когда, например, нужно посмотреть только diff определенного коммита, тяжело.

Полезные опции

Эти мелочи могут выручить всегда, даже если вашего dotfiles не будет рядом.

git log --oneline — Вывести лог в одну строку.

git add -u — Добавить в stage все, кроме файлов, находящихся вне git.

git status -s — Прагматичный статус без лишней информации.

git branch --merged — Ветки слитые в текущую.

git branch --no-merged — Ветки не слитые в текущую.

Базовые сокращения

1
2
3
4
5
6
7
8
9
10
cp = cherry-pick
st = status -s
cl = clone
ci = commit
co = checkout
br = branch

sl = stash list
sa = stash apply
ss = stash save

Diff

Изменения, приготовленные к коммиту (staged)

1
dc = diff --cached

Изменения в последнем коммите

1
dlc = diff --cached HEAD^

Изменения в определенном коммите (git dr dcee010)

1
dr  = "!f() { git diff "$1"^.."$1"; }; f"

Push / Pull

Применение изменений из векти так, чтобы все наши коммиты шли после

1
up = pull --rebase

Отправление только текущей ветки

1
put = push origin HEAD

Коммит

Отмена последнего коммита с сохранением состояния stage

1
undo = reset --soft HEAD^

Добавить все файлы в stage к последнему коммиту, не котрывая редактор с сообщением

1
aps = commit --amend -C HEAD

Определить нахождение коммита

1
where = branch -av --contains

Красивый лог

1
2
3
lg = log --pretty=format:\"%h %Cblue%ar %Cgreen%an%Creset: %s %Cred%d\"
ll = log -10 --pretty=format:\"%h %Cblue%ar %Cgreen%an%Creset: %s %Cred%d\"
gr = log --graph --pretty=format:\"%Cred%h %Cblue%ar%Creset %Cgreen%an%Creset %s%Cred%d\"o

Comments