git worktree介绍

git worktree 是 Git 命令,用于管理多分支工作区。

使用场景

  • 同时维护不同分支,隔离分支依赖差异:从原有项目开辟一个分支作为另一个新项目,当两个项目依赖差距越来越大时,每次切换分支后都需要重新安装依赖。通过git worktree 可以隔离两个分支的依赖,并且两个分支可以互相merge、cherry-pick。
  • 多个分支同步开发:允许在同一存储库中的不同分支上同时进行工作,而不需要频繁切换分支,这对于需要同时处理多个功能或修复多个 bug 的情况非常有用。
  • 进行实验性更改:在不影响主工作目录的情况下,尝试进行实验性的更改或调试。
  • 同时进行长期和短期任务:有助于同时处理长期开发任务和短期修复任务,而无需相互影响或混淆。

以下是 git worktree 的子命令:

  • add:在当前分支下创建一个新工作区。
  • remove:删除一个已添加的工作区。
  • list:显示所有已添加的工作区。
  • lock:锁定工作区以防止在合并或其他操作时被意外删除。
  • unlock:手动取消工作区的锁定。

git worktree add <path> [(-b | -B) <new-branch>]

在当前分支下创建一个新工作区,效果类似于git clone ,但新旧工作区属于同一个仓库,可以正常add、commit、merge等操作。

  • <path>:要创建的新工作区的路径,一般建立在当前目录的上一层,如../newpath
  • <new-branch>:要在哪个分支上创建工作区。如果未指定<new-branch>,则表示基于当前分支HEAD创建新分支<path>-b表示基于当前分支HEAD创建新分支<new-branch>-B表示强制创建。
# 基于HEAD创建工作区../brance1,分支为brance1
# 相当于 git worktree add ../brance1 -b brance1
git worktree add ../brance1
# 关联branch2创建工作区../brance1,分支为brance2
git worktree add ../brance1 branch2
# 基于HEAD创建工作区../brance1,分支为brance2
git worktree add ../brance1 -b brance2

git worktree remove <worktree>

移除worktree有两种方式。

  • 方式一:
# 移除指定工作区<worktree>
git worktree remove <worktree>
  • 方式二:直接删除工作区对应的文件夹,然后执行
# 清除worktree记录
git worktree prune

git worktree list

显示所有已添加的工作区。

git worktree list

# 显示完整的hash值
git worktree list --porcelain

git worktree lock <worktree>

用于锁定工作区<worktree>,以防止在合并或其他操作时被意外删除。

git worktree unlock <worktree>

解锁工作区<worktree>

git worktree处理分支依赖冲突

背景

现在远程仓库有一个项目gitworktree,存在两个分支vuereact,两个分支作为两个项目并行开发,且两分支下的依赖存在差异。

步骤

  1. 将gitworktree目录下所有内容迁移到新的文件夹gitworktree/project1,方便在一个文件夹下管理。
  2. 在目录gitworktree/project1下,执行git worktree add ../vue vue。执行完后可以发现gitworktree目录下存在两个文件夹,分别是project1 和 vue。
  3. 在目录gitworktree/project1下,执行git worktree add ../react react。执行完后可以发现gitworktree目录下存在三个文件夹,分别是project1 、 vue 和 react。

这时候就可以愉快的玩耍了,可以像往常一样add、commit、merge,甚至cherry-pick!两个分支vuereact已经隔离开了,且依赖互不影响。

与往常不同的是,vuereact之间不能互相切换分支,只需要打开对应工作区即可进入对应的分支。

git worktree与分支依赖隔离的更多相关文章

  1. git worktree 是什么及其使用场景

    先上总结: 在git worktree出现之前, git切换分支前后的文件都只存在在当前文件夹下, git worktree出现之后, 我们可以将分支切换到其他文件夹下 比如如果你的项目有很多个版本分 ...

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

    我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...

  3. Git worktree 使用笔记【转】

    gitworktree 本地仓库的多个分支在对应的文件夹内管理,能够减少很多操作,便捷高效~ 一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓 ...

  4. git worktree 使用笔记

    一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录 - walterlv的专栏 - CSDN博客 再也不用克隆多个仓库啦! ...

  5. git worktree 目录修复

    三种方式挨个尝试,1不行用2 2不行用3 1.拉取阶段失败 git worktree add -f -B xxx_branch ./xxx_branch origin/xxx_branch 强制拉取 ...

  6. 接上篇:Git Worktree 高级使用,这样清爽多了

    前言 上一篇文章 Git Worktree 大法真香 带大家了解了 git worktree 是如何帮助我同时在多个分支工作,并且互不影响的.但是创建 worktree 的目录位置不是在当前项目下,总 ...

  7. Git Pro - (2)分支

    Git 保存的不是文件差异或者变化量,而只是一系列文件快照. 在 Git中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附属信息,以及一定数量(也可能没有)指 ...

  8. git worktree

    git clone,不管是single-branch,还是non-single-branch,如果同时存在几个clone出来的branches,随着时间的推移,不停的编译.更新.编译...每个bran ...

  9. git 基于发布分支的开发

    创建发布分支: (1) 软件hello-world的1.0发布版本库中有一个里程相对应. /home/jackluo/workspace/user1/workspace/hello-worldgit ...

  10. git 创建branch分支

    开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.(1)确保是在开发者user1的工作区中cd /home/j ...

随机推荐

  1. 如何实现十亿级离线 CSV 导入 Nebula Graph

    本文首发于 Nebula Graph Community 公众号 本次实践是基于业务需求及后续扩展,通过技术选型确定了 Nebula Graph 图数据库,首先需要验证 Nebula Graph 数据 ...

  2. [C++逆向] 8 数组和指针的寻址

    目录 数组在函数中 字符串 数组作为参数 下标寻址和指针寻址 多维数组 存放指针类型数据的数组 指向数组的指针变量 函数指针 数组是相同类型数据的集合,以先行方式连续储存在内冲中 而指针只是一个保存地 ...

  3. 【2024面试刷题】一、Spring Cloud 面试题

    1.什么是 Spring Cloud? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册.配置中心.智能路 ...

  4. Mysql常用存储引擎以及区别?

    InnoDB:是Mysql的默认存储引擎,支持事务.外键.如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新.删除操作,那么InnoDB存 ...

  5. 4、dubbo的高可用

    1.zookeeper宕机与dubbo直连 现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因: 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后, ...

  6. 远程服务调用(RPC与Rest本质区别)

    一.背景 远程服务将计算机程序的工作范围从单机扩展到网络,从本地延伸至远程,是构建分布式系统的首要基础.远程服务调用(Remote Procedure Call,RPC)在计算机科学中已经存在了超过四 ...

  7. 单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有

    单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有 develop 发展 开发 de = down 下面 velop 这里 vel 就是 lev的反写 op = ...

  8. Navicat 通过 Http通道 连接远程 Mysql

    https://jingyan.baidu.com/article/3d69c551aa54dff0cf02d7a0.html 注意本机ip填写 localhost

  9. MK5 机械键盘 说明书

    FN + 右箭头 就是加快节奏 FN + ScrLk 就是切换模式

  10. js实现展开多级数组

    1.递归 function steamrollArray(arr) { let res = [] for (const a of arr) { if(a instanceof Array){ res ...