git worktree与分支依赖隔离
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,存在两个分支vue
和react
,两个分支作为两个项目并行开发,且两分支下的依赖存在差异。
步骤
- 将gitworktree目录下所有内容迁移到新的文件夹gitworktree/project1,方便在一个文件夹下管理。
- 在目录gitworktree/project1下,执行
git worktree add ../vue vue
。执行完后可以发现gitworktree目录下存在两个文件夹,分别是project1 和 vue。 - 在目录gitworktree/project1下,执行
git worktree add ../react react
。执行完后可以发现gitworktree目录下存在三个文件夹,分别是project1 、 vue 和 react。
这时候就可以愉快的玩耍了,可以像往常一样add、commit、merge
,甚至cherry-pick
!两个分支vue
和 react
已经隔离开了,且依赖互不影响。
与往常不同的是,vue
和react
之间不能互相切换分支,只需要打开对应工作区即可进入对应的分支。
git worktree与分支依赖隔离的更多相关文章
- git worktree 是什么及其使用场景
先上总结: 在git worktree出现之前, git切换分支前后的文件都只存在在当前文件夹下, git worktree出现之后, 我们可以将分支切换到其他文件夹下 比如如果你的项目有很多个版本分 ...
- 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...
- Git worktree 使用笔记【转】
gitworktree 本地仓库的多个分支在对应的文件夹内管理,能够减少很多操作,便捷高效~ 一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓 ...
- git worktree 使用笔记
一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录 - walterlv的专栏 - CSDN博客 再也不用克隆多个仓库啦! ...
- git worktree 目录修复
三种方式挨个尝试,1不行用2 2不行用3 1.拉取阶段失败 git worktree add -f -B xxx_branch ./xxx_branch origin/xxx_branch 强制拉取 ...
- 接上篇:Git Worktree 高级使用,这样清爽多了
前言 上一篇文章 Git Worktree 大法真香 带大家了解了 git worktree 是如何帮助我同时在多个分支工作,并且互不影响的.但是创建 worktree 的目录位置不是在当前项目下,总 ...
- Git Pro - (2)分支
Git 保存的不是文件差异或者变化量,而只是一系列文件快照. 在 Git中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附属信息,以及一定数量(也可能没有)指 ...
- git worktree
git clone,不管是single-branch,还是non-single-branch,如果同时存在几个clone出来的branches,随着时间的推移,不停的编译.更新.编译...每个bran ...
- git 基于发布分支的开发
创建发布分支: (1) 软件hello-world的1.0发布版本库中有一个里程相对应. /home/jackluo/workspace/user1/workspace/hello-worldgit ...
- git 创建branch分支
开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.(1)确保是在开发者user1的工作区中cd /home/j ...
随机推荐
- 【Azure 应用服务】部署WAR包到App Service访问出现404错误的解决方式
问题描述 在Linux的App Service上,通过FTP把war文件和HTML静态文件上传到wwwroot目录下,静态文件访问成功,但是java应用中的请求都返回404错误 问题解决 因为FTP上 ...
- Java 家庭记账本
1 public class FamliyAccount 2 { 3 4 public static void main(String[] args) 5 { 6 // TODO Auto-gener ...
- MYSQL 是如何保证binlog 和redo log同时提交的?
MYSQL 一个事务在提交的时候能够保证binlog和redo log是同时提交的,并且能在宕机恢复后保持binlog 和redo log的一致性. 先来看看什么是redo log 和binlog,以 ...
- electron 下网页获取 micphone 权限
网页获取麦克风或摄像头权限我们只需调用 navigator.mediaDevices.getUserMedia 方法就可唤起浏览器用户授权 const useMicphone = async () = ...
- python基础笔记((1)
逻辑与或非用的是and or not. 除法即使整除结果也是浮点数 地板除//结果一定是整数. 内存中的字符串是Unicode编码,str.encode('utf-8 or ascii')将class ...
- 最简洁明了的Linux常用命令
1.ls 命令 查看当前目录下可见的文件.文件夹及其相关权限 常用参数:-l 列表式查看 -al 查看所有,包括隐藏的文件.文件夹 [root@qinshengfei bin]# ls --color ...
- django(模版层)
一 模板语法传值 {{}}: 变量相关.过滤器 {%%}: 逻辑相关(静态文件配置.反向解析.标签相关.模版继承和 导入) def index(request): # 模板语法可以传递的后端pytho ...
- 前端优化 之 preload
为了优化我们公司网站的性能,我最近引入了浏览器预加载技术(Preload). 这项技术可以显著减少级联情况,提高资源加载的并行度,从而加速网站的加载速度. Preload的原理 Preload的原理是 ...
- CentOS 7.6 防火墙打开、关闭,端口开启、关闭
查看CentOS版本 cat /etc/redhat-release 显示系统名.节点名称.操作系统的发行版号.操作系统版本.运行系统的机器 ID 号. uname -a 防火墙命令 #查询防火墙状态 ...
- Oracle 字符串拆分成一个一个字符
SELECT (REGEXP_SUBSTR('LW112190', '[A-Z0-9]', 1, ROWNUM)) test FROM DUAL CONNECT BY ROWNUM <= LEN ...