hyperion/10-linux/00-utils/jj/jj.md
2025-11-22 17:48:07 +03:00

209 lines
No EOL
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Вот приведённый в порядок Markdown файл:
***
# 📚 Шпаргалка по Jujutsu (jj)
## Основные концепции
**jj** — это система контроля версий, которая отличается от Git философией. Вместо веток используются **bookmarks** (закладки), вместо staging area — автоматическое отслеживание.
| Концепция | Описание |
|-----------|---------|
| `@` | Текущий рабочий коммит (working copy) |
| `@-` | Родитель текущего коммита |
| Bookmark | Закладка на коммит (аналог Git ветви) |
| DAG | Направленный ациклический граф — вся история видна одновременно |
## Базовые команды
```bash
# Инициализация
jj git init # Инициализировать jj в Git репозитории
# Просмотр истории
jj log # Показать историю
jj log --graph # С визуализацией
jj log --graph --all # Вся история со всеми ветками
jj status # Статус текущего коммита
# Создание коммитов
jj new # Создать новый коммит на основе текущего
jj new -m "description" # С описанием
jj new COMMIT_ID # Создать коммит на основе конкретного
# Редактирование
jj edit COMMIT_ID # "Включить" коммит для редактирования
jj describe -m "new message" # Изменить описание текущего коммита
jj new HEAD # Создать коммит от HEAD
```
## Работа с закладками
```bash
# Создание и удаление
jj bookmark create branch-name # Создать закладку на текущий коммит
jj bookmark create branch-name -r COMMIT_ID # На конкретный коммит
jj bookmark delete branch-name # Удалить закладку
jj bookmark list # Список всех закладок
# Перемещение закладок
jj bookmark set main -r COMMIT_ID # Переместить main на коммит
jj bookmark set main -r ready # Переместить на bookmark ready
# Отслеживание удалённых закладок
jj bookmark track main@origin # Импортировать удалённую закладку
```
## Слияние и перебазирование
```bash
# Rebase (перебазирование)
jj rebase -r @ -d main # Перебазировать текущий коммит на main
jj rebase -b ready -d main # Перебазировать ветку ready на main
# Squash (объединение коммитов)
jj squash -r @ # Объединить текущий коммит с родителем
jj squash -r COMMIT_ID # Объединить конкретный коммит с его родителем
# Abandon (удаление коммита)
jj abandon COMMIT_ID # Удалить коммит (но файлы останутся в @)
```
## Git интеграция
```bash
# Экспорт и импорт
jj git export # Синхронизировать jj с Git
jj git import # Импортировать Git ветки в jj
# Push и Pull
jj git push # Запушить все изменения
jj git push -b main # Запушить только bookmark main
jj git pull # Потянуть изменения с удалённого
# Работа с Git напрямую
git checkout main # Обычные Git команды работают!
git merge BRANCH
git push origin main
```
## Разрешение конфликтов
```bash
# При конфликтах во время rebase
jj resolve # Разрешить конфликты
jj resolve --tool=union # С объединением (берёт всё)
jj diff # Посмотреть различия
# После редактирования файлов вручную
jj resolve # Отметить конфликт разрешённым
jj squash -r @ # Переместить разрешение в основной коммит
```
## Типичные workflow'ы
### Создать и слить новую ветку в main
```bash
# Посмотреть состояние
jj log --graph
# Создать новый коммит
jj new -m "feature: add something"
# Работать над коммитом (файлы отслеживаются автоматически)
# Создать закладку
jj bookmark create feature-branch
# Перебазировать на main
jj rebase -r @ -d main
# Обновить main
jj bookmark set main -r @
# Запушить
jj git push -b main
```
### Слить ветку `ready` в `main` с приоритетом ready
```bash
# Перебазировать main на ready
jj rebase -b main -d ready
# Обновить main bookmark
jj bookmark set main -r ready
# Запушить
jj git push -b main
```
### Вернуться к старому коммиту и что-то изменить
```bash
# Посмотреть историю
jj log --graph --all
# "Включить" старый коммит для редактирования
jj edit OLD_COMMIT_ID
# Делать изменения (они автоматически добавятся в текущий коммит)
# Посмотреть что изменилось
jj diff
# Если нужно разветвить от этого коммита
jj new -m "new branch from old commit"
```
## Полезные флаги и опции
```bash
# Смотреть только свои коммиты
jj log -r "author(myemail)"
# Смотреть коммиты с конкретным текстом
jj log -r "description(disko)"
# Операции с конкретным range
jj log -r "main..@" # Коммиты от main до текущего
# Отмена последней операции
jj undo
# Помощь по команде
jj new --help
```
## Когда использовать Git вместо jj
Если что-то сложное происходит, всегда можешь вернуться к Git:
```bash
# Экспортировать текущее состояние в Git
jj git export
# Теперь используй обычные Git команды
git log --oneline
git merge origin/main
git push
```
Git интеграция в jj позволяет работать гибридно!
***
**Основные улучшения:**
- Убрал лишние пустые строки между блоками кода
- Выровнял таблицу по стандартам Markdown
- Переорганизовал структуру: основные концепции → команды → workflow'ы
- Унифицировал комментарии в блоках кода (выравнивание и стиль)
- Добавил подзаголовки (###) для workflow'ов вместо жирного текста
- Упростил финальный абзац
***
Готово к добавлению в Obsidian! 🚀