Git
Псевдонимы
Поиск…
Простые псевдонимы
Существует два способа создания псевдонимов в Git:
- с файлом
~/.gitconfig
:
[alias]
ci = commit
st = status
co = checkout
- с командной строкой:
git config --global alias.ci "commit"
git config --global alias.st "status"
git config --global alias.co "checkout"
После создания псевдонима введите:
-
git ci
вместоgit commit
, -
git st
вместоgit status
, -
git co
вместоgit checkout
.
Как и в обычных командах git, псевдонимы могут использоваться рядом с аргументами. Например:
git ci -m "Commit message..."
git co -b feature-42
Список / поиск существующих псевдонимов
Вы можете перечислить существующие псевдонимы git с помощью --get-regexp
:
$ git config --get-regexp '^alias\.'
Поиск псевдонимов
Чтобы искать псевдонимы , добавьте следующее в свой .gitconfig
под [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Тогда ты можешь:
-
git aliases
- показать ВСЕ псевдонимы -
git aliases commit
- только псевдонимы, содержащие "commit"
Расширенные псевдонимы
Git позволяет использовать команды non-git и полный синтаксис оболочки sh
в ваших псевдонимах, если вы их префикс !
,
В файле ~/.gitconfig
:
[alias]
temp = !git add -A && git commit -m "Temp"
Тот факт, что полный синтаксис оболочки доступен в этих префиксированных псевдонимах, также означает, что вы можете использовать функции оболочки для создания более сложных псевдонимов, таких как те, которые используют аргументы командной строки:
[alias]
ignore = "!f() { echo $1 >> .gitignore; }; f"
Вышеупомянутый псевдоним определяет функцию f
, затем запускает ее с любыми аргументами, которые вы передаете псевдониму. Таким образом, запуск git ignore .tmp/
будет добавлять .tmp/
в ваш .gitignore
файл.
Фактически, этот шаблон настолько полезен, что Git определяет для вас переменные $1
, $2
и т. Д., Поэтому вам даже не нужно определять для него специальную функцию. (Но имейте в виду, что Git также добавит аргументы в любом случае, даже если вы получите доступ к ним через эти переменные, поэтому вам может понадобиться добавить фиктивную команду в конце.)
Обратите внимание, что псевдонимы с префиксом !
таким образом, запускаются из корневого каталога вашего git checkout, даже если ваш текущий каталог глубже в дереве. Это может быть полезным способом запускать команду из корня без необходимости явно указывать cd
.
[alias]
ignore = "! echo $1 >> .gitignore"
Временно игнорировать отслеживаемые файлы
Временно пометить файл как проигнорированный (передать файл как параметр в псевдоним) - введите:
unwatch = update-index --assume-unchanged
Чтобы снова запустить файл отслеживания - введите:
watch = update-index --no-assume-unchanged
Чтобы просмотреть все файлы, которые были временно проигнорированы, введите:
unwatched = "!git ls-files -v | grep '^[[:lower:]]'"
Чтобы очистить список неподписанных списков - введите:
watchall = "!git unwatched | xargs -L 1 -I % sh -c 'git watch `echo % | cut -c 2-`'"
Пример использования псевдонимов:
git unwatch my_file.txt
git watch my_file.txt
git unwatched
git watchall
Показать довольно журнал с графом ветвей
[alias]
logp=log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
lg = log --graph --date-order --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lgb = log --graph --date-order --branches --first-parent \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
lga = log --graph --date-order --all \
--pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
Здесь объяснение опций и заполнителей, используемых в формате --pretty
(исчерпывающий список доступен с git help log
)
--graph - нарисовать дерево фиксации
--date-order - использовать фиксацию метки времени когда возможно
- first-parent - следует только за первым родителем на узле объединения.
--branches - показать все локальные ветви (по умолчанию отображается только текущая ветка)
--all - показать все локальные и удаленные ветви
% h - значение хеша для фиксации (сокращенно)
% ad - штамп даты (автор)
% an - Имя пользователя автора
% an - Записать имя пользователя
% C (авто) - использование цветов, определенных в разделе [цвет]
% Creset - сбросить цвет
% d - --decorate (имена ветвей и тегов)
% s - сообщение фиксации
% ad - дата автора (будет следовать директиве -date) (а не дата commiter)
% an - имя автора (может быть% cn для имени commiter)
Обновление кода при сохранении линейной истории
Иногда вам необходимо сохранить линейную (не ветвящуюся) историю вашего кода. Если вы какое-то время работаете над веткой, это может быть сложно, если вам нужно сделать обычный git pull
так как это приведет к слиянию с восходящим потоком.
[alias]
up = pull --rebase
Это будет обновляться с вашим исходным исходным кодом, а затем повторно использовать любую работу, которую вы не нажимали поверх того, что вы сняли.
Использовать:
git up
Посмотрите, какие файлы игнорируются вашей конфигурацией .gitignore.
[ alias ]
ignored = ! git ls-files --others --ignored --exclude-standard --directory \
&& git ls-files --others -i --exclude-standard
Показывает одну строку на файл, поэтому вы можете grep (только каталоги):
$ git ignored | grep '/$'
.yardoc/
doc/
Или считать:
~$ git ignored | wc -l
199811 # oops, my home directory is getting crowded
Нестандартные поэтапные файлы
Как правило, для удаления файлов, которые поставлены для фиксации с помощью обязательства reset
git reset
, reset
имеет множество функций в зависимости от аргументов, предоставленных ему. Чтобы полностью отключить все поставленные файлы, мы можем использовать псевдонимы git для создания нового псевдонима, который использует reset
но теперь нам не нужно помнить о том, чтобы предоставить правильные аргументы для reset
.
git config --global alias.unstage "reset --"
Теперь, в любое время, когда вы хотите разбить файлы с этапами, введите git unstage
и вам хорошо идти.