Обычно, если нам что-то срочно нужно поправить в другой ветке, и вернуться к работе в текущей, мы должны получить
Иногда срочно необходимо поработать в другой ветке, и вернуться к работе в текущей, то стандартный сценарий таков: прячем изменения (stash) и переключаем ветку, затем пушим изменения и возвращаемся к исходной ветке. Изменения working copy восстанавливаем из stash.Происходит такой набор действий.
Мало кто знает, но с Git 2.5, доступны множественные рабочие деревья — multiple worktrees. Это значит, что в локальном репозитории ветки доступны для параллельного chekout. Можно одновременно работать в master и develop ветке, не переключать ветки через stash, что экономит время и нервы. Пример: репозиторий клонируется в две папки, в одной — работаем с master, в другой — работаем с develop. После работы — пушим, удаляем ненужную папку.
Каждый раз делать такое утомительно. Поэтому в git появилась поддержка подобного поведения в виде команды worktree. Команда worktree add создает папку, автоматически делает в неё chekout нужной ветки.
Приведу пример: мы работаем в ветке feature1, нам нужно переключиться на ветку feature2, чтобы завершить работу внезапно заболевшего коллеги.
Структура папок изначально такая.
- my-project
- .gitignore
- MyProject
- Program.cs
- MyProject.sln
После выполнении команды
1 | git worktree add ../feature2_hotfix feature2 |
добавляется папка feature2 под новую ветку feature2:
- my-project
- .gitignore
- MyProject
- Program.cs
- MyProject.sln
- feature2_hotfix
- .gitignore
- MyProject
- Program.cs
- MyProject.sln
Можем открыть папку в IDE и начать работать, либо перейти в папку в консоли: git cd ../feature2_hotfix
Когда работа завершена, можно просто удалить ненужную папку, очистить git от ненужной ссылки на ветку командой
git worktree prune или же удалить встроенной командой git worktree remove ../feature2_hotfix
Очень удобно откалывать ветку в отдельную папку такой командой:
1 | git worktree add -b some-hotfix ../hotfix-01 master |
Эта команда откалывает новую ветку some-hotfix от master и создает для нее папку hotfix-01, где можно независимо работать, достаточно перейти в нее командой cd ../hotfix-01 или pushd
Список всех подключенных worktree можно посмотреть командой git worktree list.
Ссылка на документацию: https://git-scm.com/docs/git-worktree