<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Git Worktree on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/ru/tags/git-worktree/</link>
        <description>Recent content in Git Worktree on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ru</language>
        <lastBuildDate>Sat, 08 Aug 2026 08:29:00 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/ru/tags/git-worktree/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Зачем делать git stash при каждом переключении веток? Что такое Git Worktree? В чем разница между Git Worktree и Git Branch? Как использовать Git Worktree для создания высокоэффективного многопоточного процесса разработки</title>
        <link>https://dev.tldrlss.com/ru/article/2026/08/git-worktrees-branch-guide-multi-thread-workflow/</link>
        <pubDate>Sat, 08 Aug 2026 08:29:00 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/ru/article/2026/08/git-worktrees-branch-guide-multi-thread-workflow/</guid>
        <description>&lt;img src="https://dev.tldrlss.com/global-assets/images/app/git-1.jpg" alt="Featured image of post Зачем делать git stash при каждом переключении веток? Что такое Git Worktree? В чем разница между Git Worktree и Git Branch? Как использовать Git Worktree для создания высокоэффективного многопоточного процесса разработки" /&gt;&lt;p&gt;Бывали ли вы в такой ситуации? Вы в самом разгаре разработки сложной новой функции, код готов наполовину, и вдруг приходит срочный баг, требующий немедленного исправления.&lt;/p&gt;
&lt;p&gt;Чтобы переключить ветку (branch), вам приходится неохотно выполнять &lt;code&gt;git stash&lt;/code&gt;, чтобы спрятать недописанный код. Исправив баг и вернувшись, вы осторожно делаете &lt;code&gt;git stash pop&lt;/code&gt;, иногда сталкиваясь с кошмаром конфликтов кода (conflict).&lt;/p&gt;
&lt;p&gt;На самом деле в &lt;code&gt;Git&lt;/code&gt; давно есть мощный инструмент для решения этой проблемы — &lt;code&gt;Git Worktree&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Попрощайтесь с хаотичным переключением веток и Stash и откройте для себя многопоточную разработку с Worktree&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Эта статья поможет вам разобраться в его ключевых принципах и практическом применении.&lt;/p&gt;
&lt;h2 id=&#34;в-чем-разница-между-git-worktree-и-git-branch&#34;&gt;В чем разница между Git Worktree и Git Branch?
&lt;/h2&gt;&lt;p&gt;Чтобы понять &lt;code&gt;Git Worktree&lt;/code&gt;, давайте сначала выясним его отличие от &lt;code&gt;Git Branch&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Мы можем сравнить контроль версий с чтением бумажной книги:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Commit&lt;/code&gt; — это &lt;strong&gt;издание / версия книги&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Branch&lt;/code&gt; — это &lt;strong&gt;закладка, вложенная на определенной странице&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worktree&lt;/code&gt; — это &lt;strong&gt;рабочий стол, на котором вы раскладываете книгу&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При традиционном подходе у нас есть только один рабочий стол. Каждый раз, когда нужно сменить закладку, приходится убирать все редактируемые бумаги со стола или прятать их в ящик (что и делает &lt;code&gt;git stash&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;В то же время &lt;code&gt;Git Worktree&lt;/code&gt; позволяет вам иметь несколько &lt;strong&gt;независимых рабочих столов&lt;/strong&gt; одновременно.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Критерий сравнения&lt;/th&gt;
          &lt;th&gt;Git Branch&lt;/th&gt;
          &lt;th&gt;Git Worktree&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Концепция Workspace&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Использует один физический рабочий каталог&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Имеет несколько независимых физических рабочих каталогов&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Затраты на переключение&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Требуются commit, stash или сохранение изменений&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Без stash; достаточно просто перейти в другой каталог&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Изоляция и безопасность&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Незакоммиченные файлы могут вызвать конфликты&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Каталоги полностью изолированы, изменения не мешают друг другу&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;История изменений&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Использует общую историю Commit и веток Git&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Использует общую историю Commit и веток Git&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Текущая ветка, Staging Area и незакоммиченные изменения в каждом Worktree полностью независимы, но они &lt;strong&gt;используют общую историю Commit и записи веток&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Branch — это закладка версии, а Worktree — это физический рабочий стол&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Таким образом, когда вам нужно переключить задачу, вы просто открываете другой каталог с папкой, абсолютно не меняя текущее состояние разработки.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;как-начать-использовать-git-worktree&#34;&gt;Как начать использовать Git Worktree?
&lt;/h2&gt;&lt;p&gt;При внедрении &lt;code&gt;Git Worktree&lt;/code&gt; в реальные проекты грамотное планирование каталогов делает разработку значительно более гладкой.&lt;/p&gt;
&lt;p&gt;Рекомендуется сохранять исходный каталог проекта, клонированный через &lt;code&gt;git clone&lt;/code&gt;, как чистый штаб &lt;code&gt;main&lt;/code&gt;, а новые каталоги Worktree размещать за пределами основного проекта (например, &lt;code&gt;../my-app-worktrees&lt;/code&gt;), чтобы избежать ошибок рекурсивного сканирования инструментами разработки.&lt;/p&gt;
&lt;p&gt;Типичный порядок команд выглядит следующим образом:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Этап&lt;/th&gt;
          &lt;th&gt;Команда&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. Создать новый Worktree и одновременно новую ветку&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree add ../my-app-worktrees/feature-login -b feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2. Просмотреть список всех текущих Worktree&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree list&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;Git Worktree&lt;/code&gt; отлично подходит для управления задачами разработки &lt;code&gt;AI Agent&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Вы можете выделить &lt;code&gt;AI Agent&lt;/code&gt; отдельный каталог Worktree, чтобы он свободно вносил изменения и тестировал их, пока разработчик-человек выполняет ревью кода (Review) и тестирование в другом Worktree.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Выделите AI Agent отдельный Worktree, чтобы разработка ИИ и проверка человеком выполнялись параллельно&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Оба работают в своих физических каталогах, что безопасно и наглядно.&lt;/p&gt;
&lt;h2 id=&#34;как-безопасно-слить-изменения-и-выполнить-очистку-после-завершения-разработки&#34;&gt;Как безопасно слить изменения и выполнить очистку после завершения разработки?
&lt;/h2&gt;&lt;p&gt;После завершения работы в отдельном Worktree, как объединить результаты и произвести очистку?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Запомните важную концепцию: Сам каталог Worktree сливать не нужно, &lt;strong&gt;сливать нужно именно Branch&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вам нужно лишь вернуться в рабочий каталог &lt;code&gt;main&lt;/code&gt; и выполнить команду &lt;code&gt;git merge&lt;/code&gt; для соответствующей ветки функции, чтобы завершить интеграцию.&lt;/p&gt;
&lt;p&gt;Для очистки следуйте стандартной двухшаговой процедуре:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Шаг&lt;/th&gt;
          &lt;th&gt;Команда&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. Удалить физический каталог Worktree&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git worktree remove ../my-app-worktrees/feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2. Удалить завершенную ветку функции&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git branch -d feature-login&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Сначала удалите каталог Worktree, затем удалите Branch&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Обязательно используйте команду &lt;code&gt;git worktree remove&lt;/code&gt; для очистки, вместо ручного удаления папки через проводник.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;каковы-распространенные-подводные-камни-при-использовании-git-worktree&#34;&gt;Каковы распространенные подводные камни при использовании Git Worktree?
&lt;/h2&gt;&lt;p&gt;Хотя &lt;code&gt;Git Worktree&lt;/code&gt; очень удобен, при его использовании есть несколько нюансов, на которые стоит обратить внимание.&lt;/p&gt;
&lt;h3 id=&#34;подводный-камень-1-потеря-незакоммиченных-изменений&#34;&gt;Подводный камень 1: Потеря незакоммиченных изменений
&lt;/h3&gt;&lt;p&gt;Хотя удаление Worktree не удаляет саму ветку, если у вас в этом каталоге остались незакоммиченные изменения, принудительное удаление каталога Worktree приведет к их безвозвратной потере.&lt;/p&gt;
&lt;h3 id=&#34;подводный-камень-2-конфликт-занятости-ветки&#34;&gt;Подводный камень 2: Конфликт занятости ветки
&lt;/h3&gt;&lt;p&gt;Защитный механизм &lt;code&gt;Git&lt;/code&gt; &lt;strong&gt;не позволяет выполнять Checkout одной и той же ветки одновременно в двух разных Worktree&lt;/strong&gt;. Если вы попытаетесь переключиться на уже занятую ветку во втором Worktree, &lt;code&gt;Git&lt;/code&gt; заблокирует действие и выдаст ошибку.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Принудительное удаление Worktree приведет к потере несохраненных через Commit изменений&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Освоив эти особенности и принципы, вы легко избежите ошибок.&lt;/p&gt;
&lt;h2 id=&#34;заключение&#34;&gt;Заключение
&lt;/h2&gt;&lt;p&gt;Благодаря &lt;code&gt;Git Worktree&lt;/code&gt; мы можем навсегда попрощаться с хаотичным переключением веток и процессом &lt;code&gt;git stash&lt;/code&gt;, достигнув настоящей многопоточной разработки.&lt;/p&gt;
&lt;p&gt;В следующий раз, когда вам понадобится срочно исправить баг, вести разработку нескольких функций одновременно или поручить задачи по написанию кода &lt;code&gt;AI Agent&lt;/code&gt;, попробуйте открыть новый рабочий стол!&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://git-scm.com/docs/git-worktree&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Git - git-worktree Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
