Проверка сиротской ветви в новом рабочем дереве

Я знаю, что новую сиротскую ветвь можно создать так:

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 г.)

коммит 35f0383worktree 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

Совет, отображаемый, когда пользователь пытается создать рабочее дерево из недопустимой ссылки, чтобы указать, как вместо этого создать новую потерянную ветвь.

Другие вопросы по тегам