我使用git worktree add
创建了一个新的工作树。我注意到它在repo中创建了一个与工作树同名的新分支。这个分支是什么?
我已在第二个工作树中检出了另一个预先存在的分支。我可以自由删除git worktree add
创建的分支吗?
答案 0 :(得分:18)
当其他人回答这个问题时,我在此处删除了folder
,删除worktree
并删除branch
的命令:
首先,列出所有工作树,以便仔细检查......
$ git worktree list
然后,删除工作树的文件夹
$ rm -rf ../path/to/worktree
之后,删除工作树本身
$ git worktree prune
如果你有多个工作树,上面的命令只修剪它的路径不再存在的工作树,所以不要担心!
最后,删除分支(与工作树相同的分支名称)
$ git branch -D <branch-name>
答案 1 :(得分:12)
分支是必要的,因为您不能同时在不同的工作树中检出相同的分支。
因此,如果在添加工作树时没有指定分支,那么git将根据您当前的分支和工作树目录的名称自动添加一个分支。
您可能会问,为什么我不能两次分支结账?想想当你提交B时工作树A会发生什么,如果他们都共享分支......工作树A会看到B中的提交作为本地区别,但反之亦然!就好像你做过git reset --soft HEAD^
......那将是非常危险的。
BTW,这就是为什么你不能推送签出的非裸存储库的分支的原因。
关于你的上一个问题:你能删除分支吗?当然,那个分支绝不是特别的。只要没有在任何地方签出,您就可以删除它。
答案 2 :(得分:3)
git worktree --help清楚地提到了这一点如下。
COMMANDS
add <path> [<branch>]
Create <path> and checkout <branch> into it. The new working directory is linked to the current repository, sharing everything
except working directory specific files such as HEAD, index, etc.
If <branch> is omitted and neither -b nor -B is used, then, as a convenience, a new branch based at HEAD is created automatically,
as if -b $(basename <path>) was specified.
prune
Prune working tree information in $GIT_DIR/worktrees.
答案 3 :(得分:3)
git worktree
将添加一个新分支:
如果省略
function translatePigLatin(str) { for (i = 0; i < str.length; i++) { let constantants = []; if ( str[0] == 'a' || str[0] == 'a' || str[0] == 'e' || str[0] == 'i' || str[0] == 'o' || str[0] == 'u' ) { return str + 'way'; } else { while (str[i] != 'a' || str[i] != 'a' || str[i] != 'e' || str[i] != 'i' || str[i] != 'o' || str[i] !='u'){ constantants.push(str[i]); } return str.slice(constantants.length) + constantants + 'ay'; } } } translatePigLatin('california');
且未使用<commit-ish>
,-b
或-B
, 然后,为方便起见,自动创建一个基于HEAD的新分支, 就像指定了--detach
一样。
Since Git 2.17,您可以使用git worktree remove
删除该分支。
但是,同样的-b $(basename <path>)
命令也包括:
可以使用
remove
删除不干净的工作树或带子模块的工作树 无法删除主工作树。
真......除了--force
在Git 2.17中没有完全实现。
使用Git 2.18(2018年第二季度),“--force
”获悉“git worktree remove
”是“-f
”选项的简写,就像“git worktree add”一样。< / p>
commit d228eea见Stefan Beller (stefanbeller
)(2018年4月17日)
帮助:Eric Sunshine (sunshineco
)。
(由Junio C Hamano -- gitster
--合并于commit 90186fa,2018年5月8日)
--force
:接受worktree
缩短-f
以便删除许多命令支持“
--force
”选项,通常缩写为 “--force
”。
但是,“-f
”的手动git worktree remove
会忘记 尽管有OPT_BOOL
文件记录,但仍能识别短文 支持“git-worktree.txt
” 将-f
替换为免费提供“OPT_BOOL
”的OPT__FORCE
,并使“-f
”符合“remove
”选项解析(也指定了add
旗帜。)
答案 4 :(得分:2)
似乎你可以使用--detach
以分离模式运行,而var data = {"Name":"first name","age":30}
var serializedData = JSON.stringify(data);
var link = document.getElementById('downloadlink');
link.href = makeTextFile(serializedData);
document.getElementById('downloadlink').click();
不会创建分支。如果您不打算在工作树中进行修改,但仅运行构建或运行测试,这可能很有用。
来源: https://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks
答案 5 :(得分:0)
从Git 2.17.0开始,您可以安全地运行这个一体化命令
git worktree remove <path>