Вот приведённый в порядок 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! 🚀