209 lines
No EOL
7.7 KiB
Markdown
209 lines
No EOL
7.7 KiB
Markdown
Вот приведённый в порядок 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! 🚀 |