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. 【Azure App Service for Linux】Linux Web App如何安装系统未安装的包

    问题描述 Linux Web App中如何安装系统默认未安装的包,如何来执行如 apt install XXX命令呢?现在遇见的问题时,通过Azure App Service门户中的SSH登录后,执行 ...

  2. 代码随想录算法训练营第七天| LeetCode 454.四数相加II 15. 三数之和 18. 四数之和

    454.四数相加II 卡哥建议:本题是使用map巧妙解决的问题,好好体会一下 哈希法如何提高程序执行效率,降低时间复杂度,当然使用哈希法会提高空间复杂度,但一般来说我们都是舍空间换时间, 工业开发也是 ...

  3. [QT] 记录一些使用技巧

    目录 概述 打开窗口 弹出消息框 判断文件存在 获取时间 获取子控件 TableWidget设置不可编辑 QT QString判断纯数字 Qt 保存文件选择器 读写ini 概述 最近花了好几天的时间编 ...

  4. 如何避免MYSQL主从延迟带来的读写问题?

    在MYSQL 部署架构选型上,许多公司都会用到主从读写分离的架构,如下是一个一主一从的架构,主库master负责写入,从库slave进行读取. 但是既然是读写分离,必然会面临这样一个问题,当在主库上进 ...

  5. java线程示例

    需要开启线程 的方法继承线程类,并在run  中写逻辑 public class Ant extends Thread{ Cake cake; public Ant(String name,Cake ...

  6. Spring事务(五)-事务隔离级别

    Spring @Transactional注解isolation属性 @Transactional注解通过isolation属性设置事务隔离级别.如下: @Transactional(isolatio ...

  7. 巧用SQL语句中的OR查询完成业务新需求-2022新项目

    一.业务场景 目前参与开发的项目,之前的一个已上线的版本中有一类查询是根据两张表进行LEFT JOIN查询用来取数据, 主表中有一个字段field用来区分不同的数据类型比如说A/B/C.前面的版本中只 ...

  8. 关闭 nginx | taskkill /f /t /im nginx.exe

    stop.bat taskkill /f /t /im nginx.exe pause

  9. CMAKE的学习

    下面我们来介绍Cmake Cmake 我们着重介绍一下CMAKE,是因为CMAKE现在用的人比MAKEFILE多一些,也更好理解,编写一些. 1 安装 cmake 1.1 卸载已经安装的旧版的CMAK ...

  10. 安装完exe版本jdk之后未配置java_home和path环境变量仍然可以在cmd中使用java命令原因解释

    如题: 为何可以 打出Java -version的版本 ,因为jdk安装过程,拷贝了java\javac等几个命令到C:\windows\system32目录了. 如果使用javac -version ...