Проверка сиротской ветви в новом рабочем дереве
Я знаю, что новую сиротскую ветвь можно создать так:
git checkout --orphan <new_branch>
однако это использует мое текущее рабочее дерево, которое я хочу оставить полностью нетронутым. Я старался:
git --work-tree=/tmp/test checkout --orphan <new_branch>
но это также, кажется, использует мое текущее рабочее дерево, а не то, которое я указал, используя --work-tree
,
Я мог бы использовать второй клон, но это не кажется оптимальным. Любой способ решить это с помощью рабочих деревьев?
3 ответа
Сделайте дерево с оторванной головой и осиротите его:
git worktree add --detach /.../dir
cd /.../dir
git checkout --orphan branch
Вы можете попробовать git-worktree.
git checkout --orphan <new_branch>
git commit
git worktree add /tmp/test <new_branch>
# switch to the previous branch
git checkout -
# or
git checkout <previous_branch>
cd /tmp/test
# do something to <new_branch>
Сейчас /tmp/test
это субдерево. Разделяет то же самое .git
с основным рабочим деревом. Если вам не нужно дополнительное рабочее дерево, вы можете просто удалить /tmp/test
, Новые коммиты хранятся в основном хранилище.
Если ваш Git еще не поддерживает git-worktree, вам нужна более новая версия.
С Git 2.42 (3 квартал 2023 г.), ''( ) научился создавать рабочее дерево на основе потерянной ветки с .
Поэтому это следует поддержать.
См. коммит 926c40d , коммит 128e549 , , коммит 7ab8918 , коммит 9ccdace , коммит ed6db0e , коммит 1b28fbd , коммит b71f919 (17 мая 2023 г.) Джейкоба Абеля (
0xnu11pwn
) .
(Объединено Джунио К. Хамано --
gitster
-- в коммите 4dd0469 , 22 июня 2023 г.)
коммит 35f0383
worktree add
: представить "попробуй--orphan
" намекатьПодпись: Джейкоб Абель
Добавить новый совет/подсказку в
git worktree add
(человекman ) , когда пользователь пытается создать новое рабочее дерево из несуществующей ссылки.Текущее поведение:
% git init foo Initialized empty Git repository in /path/to/foo/ % touch file % git -C foo commit -q -a -m "test commit" % git -C foo switch --orphan norefbranch % git -C foo worktree add newbranch/ Preparing worktree (new branch 'newbranch') fatal: invalid reference: HEAD %
Новое поведение:
% git init --bare foo Initialized empty Git repository in /path/to/foo/ % touch file % git -C foo commit -q -a -m "test commit" % git -C foo switch --orphan norefbranch % git -C foo worktree add newbranch/ Preparing worktree (new branch 'newbranch') hint: If you meant to create a worktree containing a new orphan branch hint: (branch with no commits) for this repository, you can do so hint: using the --orphan option: hint: hint: git worktree add --orphan newbranch/ hint: hint: Disable this message with "git config advice.worktreeAddOrphan false" fatal: invalid reference: HEAD % git -C foo worktree add -b newbranch2 new_wt/ Preparing worktree (new branch 'newbranch') hint: If you meant to create a worktree containing a new orphan branch hint: (branch with no commits) for this repository, you can do so hint: using the --orphan option: hint: hint: git worktree add --orphan -b newbranch2 new_wt/ hint: hint: Disable this message with "git config advice.worktreeAddOrphan false" fatal: invalid reference: HEAD %
git config
теперь включает в свою справочную страницу :
worktreeAddOrphan
Совет, отображаемый, когда пользователь пытается создать рабочее дерево из недопустимой ссылки, чтобы указать, как вместо этого создать новую потерянную ветвь.