Как настроить и работать с Magit?
Categories:
Сводная таблица горячих клавиш Magit
Основные команды
Комбинация | Действие |
---|---|
C-x g |
Открыть Magit status |
s |
Stage изменения |
u |
Unstage изменения |
c |
Commit |
C |
Extended commit |
P |
Push |
F |
Pull |
b |
Branch |
m |
Merge |
l |
Log |
t |
Tag |
z |
Stash |
k |
Discard изменения |
Навигация
Комбинация | Действие |
---|---|
TAB |
Развернуть/свернуть секцию |
n |
Следующий элемент |
p |
Предыдущий элемент |
M-n |
Следующая секция |
M-p |
Предыдущая секция |
Статус репозитория
Комбинация | Действие |
---|---|
g |
Обновить статус |
= |
Diff |
E |
Ediff |
Установка Magit
- Установите через package.el:
(use-package magit
:ensure t)
- Или через MELPA:
M-x package-install RET magit RET
Основной рабочий процесс
1. Открытие Magit status
Основная точка входа - окно статуса:
2. Просмотр изменений
В окне статуса:
- Неотслеживаемые файлы (Untracked)
- Измененные файлы (Unstaged changes)
- Подготовленные к коммиту изменения (Staged changes)
Используйте TAB
для разворачивания секций.
3. Подготовка изменений (Stage)
- Наведите курсор на файл и нажмите
s
для stage - Для stage конкретных изменений внутри файла:
- Откройте diff (
=
на файле) - Перейдите к нужному блоку изменений
- Нажмите
s
- Откройте diff (
4. Создание коммита
После stage изменений:
- Нажмите
c
для начала коммита - Затем:
c
- обычный коммитC
- extended commit (с дополнительными опциями)
Введите сообщение коммита и завершите C-c C-c
.
5. Работа с ветками
b b
- переключение между веткамиb c
- создание новой веткиb n
- переименование веткиb d
- удаление ветки
6. Синхронизация с удаленным репозиторием
P p
- push текущей веткиF u
- pull с rebaseF p
- обычный pull
Продвинутые возможности
1. Интерактивный rebase
- Откройте log (
l l
) - Выберите коммит, с которого начать rebase
- Нажмите
r i
для интерактивного rebase - Используйте команды:
p
- pick (оставить коммит)r
- reword (изменить сообщение)e
- edit (изменить коммит)s
- squash (объединить с предыдущим)f
- fixup (как squash, но отбросить сообщение)
2. Работа с stash
z s
- создать stashz a
- применить stashz p
- pop stash (применить и удалить)z d
- удалить stash
3. Разрешение конфликтов
При возникновении конфликтов:
- Откройте файл с конфликтами
- Используйте
M-x magit-ediff-resolve
для интерактивного разрешения - После разрешения всех конфликтов сделайте
git add
(s
в Magit)
Кастомизация Magit
Настройка в .emacs
(setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
;; Автозавершение при вводе сообщений коммита
(add-hook 'git-commit-mode-hook 'git-commit-turn-on-flyspell)
Полезные расширения
magit-todos
- просмотр TODO в кодеmagit-gitflow
- поддержка git-flowforge
- интеграция с GitHub/GitLab
Советы и рекомендации
- Используйте
M-x magit-file-delete
для удаления файлов через Magit - Для частичного stage используйте
s
внутри diff M-x magit-blame-mode
для просмотра аннотаций к строкамM-x magit-submodule
для работы с подмодулями- Для сложных операций используйте команды через
M-x magit-*
Решение проблем
Magit работает медленно
Добавьте в конфигурацию:
(setq magit-refresh-status-buffer nil)
Проблемы с аутентификацией
Настройте:
(setq magit-git-executable "/path/to/git")
(setq magit-credential-cache-daemon-socket "~/.git-credential-cache/socket")
Magit предоставляет мощный интерфейс для работы с Git, сочетающий удобство использования с полнотой функционала. Освоение его горячих клавиш значительно ускорит ваш рабочий процесс.
Команды Magit
C-x g
для отображения информации о текущем репозитории Git
s
/ u
добавить файл в индекс или убрать из индекса.
C-SPC
— поставить метку на файле C-n
C-p
отметить список файлов из отменить,потом s
или u
для включения или исключения.
c
откроет меню для COMMIT и другие варианты, нажимаю еще раз c
, ввожу комментарий commit и нажимаю C-c
для выполнения commit.
Список команд
Key Binding
TAB magit-section-toggle
RET magit-visit-thing
C-w magit-copy-section-value
SPC magit-diff-show-or-scroll-up
! magit-run
$ magit-process-buffer
% magit-worktree
+ magit-diff-more-context
- magit-diff-less-context
0 magit-diff-default-context
1 magit-section-show-level-1
2 magit-section-show-level-2
3 magit-section-show-level-3
4 magit-section-show-level-4
5 .. 9 digit-argument
: magit-git-command
< beginning-of-buffer
> magit-sparse-checkout
? magit-dispatch
A magit-cherry-pick
B magit-bisect
C magit-clone
D magit-diff-refresh
E magit-ediff
F magit-pull
G magit-refresh-all
H magit-describe-section
I magit-init
J magit-display-repository-buffer
K magit-file-untrack
L magit-log-refresh
M magit-remote
O magit-subtree
P magit-push
Q magit-git-command
R magit-file-rename
S magit-stage-modified
T magit-notes
U magit-unstage-all
V magit-revert
W magit-patch
X magit-reset
Y magit-cherry
Z magit-worktree
^ magit-section-up
a magit-cherry-apply
b magit-branch
c magit-commit
d magit-diff
e magit-ediff-dwim
f magit-fetch
g magit-refresh
h magit-dispatch
i magit-gitignore
j magit-status-jump
k magit-delete-thing
l magit-log
m magit-merge
n magit-section-forward
o magit-submodule
p magit-section-backward
q magit-mode-bury-buffer
r magit-rebase
s magit-stage-file
t magit-tag
u magit-unstage-file
v magit-revert-no-commit
w magit-am
x magit-reset-quickly
y magit-show-refs
z magit-stash
DEL magit-diff-show-or-scroll-down
S-SPC magit-diff-show-or-scroll-down
C-<return> magit-visit-thing
C-<tab> magit-section-cycle
M-<tab> magit-section-cycle-diffs
<backtab> magit-section-cycle-global
<remap> <dired-jump> magit-dired-jump
<remap> <back-to-indentation> magit-back-to-indentation
<remap> <evil-next-line> evil-next-visual-line
<remap> <evil-previous-line> evil-previous-visual-line
<remap> <next-line> magit-next-line
<remap> <previous-line> magit-previous-line
C-c C-c magit-dispatch
C-c C-e magit-edit-thing
C-c C-o magit-browse-thing
C-c C-w magit-copy-thing
C-M-i magit-dired-jump
M-w magit-copy-buffer-revision
C-c TAB magit-section-cycle
M-1 magit-section-show-level-1-all
M-2 magit-section-show-level-2-all
M-3 magit-section-show-level-3-all
M-4 magit-section-show-level-4-all
M-n magit-section-forward-sibling
M-p magit-section-backward-sibling
<left-fringe> <mouse-1> magit-mouse-toggle-section
<left-fringe> <mouse-2> magit-mouse-toggle-section