前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >git worktree

git worktree

作者头像
jgrass
发布2024-12-25 16:12:31
发布2024-12-25 16:12:31
10200
代码可运行
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记
运行总次数:0
代码可运行

一 worktree 的基本概念和操作

再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录 - walterlv

二 语法速览

  • 最简单的写法: git worktree add <新路径>

将基于当前分支,新建一个 worktree 目录,新的分支名就是新建目录的名称。

  • 新建一个指定分支 git worktree add <新路径> -b <新分支名>

将基于当前分支,新建一个 worktree 目录,新的分支名是指定的名称。

  • 基于指定分支新建一个指定分支 git worktree add <新路径> -b <新分支名> <指定分支名>

将基于指定分支,新建一个 worktree 目录,新的分支名是指定的名称。

三 注意事项

  • <新路径> 新路径一般是类似 ../myproject-bugfix 这样的命名,是相对路径,注意,这里一定是两个点: **../**myproject-bugfix

表示在当前目录的父目录新建,这样才是与原工程目录平级。(当前,你当前得在原工程的跟目录中。)

总之,注意相对路径。

  • 使用 git reset —hard 重置新的 worktree 如果使用了 git worktree add <新路径> 最简单的方法新建,通常分支需要重新命名,基于的分支也要改。 可使用 git reset --hard <要基于的分支名> 重置到想要的分支,使用 git branch -D <想要删除的分支名> 删除自动创建的与目录名相同的分支。

四 其它废话

相比复制多个仓库,肯定是 worktree 的方式更高效。

当然,worktree 不允许两个 worktree 使用同一个分支。如果有这个需要怎么办?新建一个分支,reset 到目标分支,再基于这个新分支工作,效果一样。 但如果你经常需要在两个目录中使用同一个分支,那么可能是分支管理或工作方式需要改进。

另外,不使用的 worktree 尽早删除,并运行 git worktree prune 清理。

五 使用场景

worktree 是用来做什么的?

在团队合作中,通常会用多个分支来进行开发管理。设想一个场景,你目前正在 feature/a 分支愉快地开发新功能(代码位置在 .\awesome 文件夹),有些代码还在编写中,都没有提交。 此时,线上版本 release 分支出现了一个紧急 BUG 需要你修复。

在 feature/a 分支(或者说 .\awesome 文件夹) 还有一些未提交的修改,不希望被破坏,此时有如下方案解决这个问题。

1 可以使用 git stash 命令将未提交的修改暂存,然后新建一个分支修 BUG,回头在 git stash pop 把暂存的内容恢复。

2 在一个新的文件夹(比如 .\awesome-fix-bug ),使用 git clone 重新拉取仓库,然后新建一个分支,如 t/fix-bug 来修复 BUG。

使用 git clone 有一个问题是,如果仓库非常大(比如几个 G),clone 一次的时间是非常长的,worktree 就是用来解决这个问题的。

3 在 .\awesome 文件夹内执行如下命令 git worktree add ../awesome-fix-a-bug -b t/fixbug 就可以创建一个新文件夹,并创建一个新分支 t/fixbug,效果和 git clone 很像, 但是速度会非常快,因为复用了当前 git 的数据,不必完全再从服务器复制一份下来。

然后,切换到 awesome-fix-a-bug 文件夹,将 t/fixbug 分支重置到需要修复 BUG 的分支,如 git reset --hard origin/release,就可以开始修复 BUG 了。

上述紧急修复 BUG 的场景,完整的 git 命令大致如下(注意,这里只是举例,具体应该怎么做,与你们团队的 git 工作流有关):

Terminal window

代码语言:javascript
代码运行次数:0
运行
复制
# 在 awesome 文件夹# 作用:创建一个新文件夹 awesome-fix-a-bug,并创建一个新分支 t/fixbug,这个分支是基于 awesome 文件夹中的代码所处的分支创建的git worktree add ../awesome-fix-a-bug -b t/fixbug
cd ../awesome-fix-a-bug# 在 awesome-fix-a-bug 文件夹git fetch # 拉取最新代码git reset --hard origin/release # 将 t/fixbug 分支重置为当前最新的 release 分支
# 开始就行编码,进行 BUG 修复
git push # 将 t/fixbug 分支推送到服务器,提交合并请求,准备进行代码审查

原文链接: https://cloud.tencent.com/developer/article/2481456

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年7月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 worktree 的基本概念和操作
  • 二 语法速览
  • 三 注意事项
  • 四 其它废话
  • 五 使用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档