不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?

本文介绍了Git的worktree功能,允许在不切换分支的情况下在多个分支上同时工作,避免了切换分支带来的问题。通过`git worktree add`创建新的工作区,`git worktree list`查看工作区,`git worktree remove`删除工作区,以及`git worktree prune`清理不再需要的工作区。这种方式比克隆多个repo更高效,且易于管理。
摘要由CSDN通过智能技术生成

背景

上一篇文章 保持清洁的Git提交记录,三招就够了 ,大家看过后有私下留言说这是非常好用的功能,我突然想到工作中用到的另外一个 Git 功能那也是相当好用,必须全盘托出

作为程序员的我们应该都有一个感受,一旦进入某个项目,从开发,到发布生产,到 hotfix,到后期维护,那基本都有你的份,正在开发某个 feature,老板突然跳出来说让你做生产上的 hotfix 更是家常便饭,面对这种情况,使用 Git 的我们通常有两种解决方案:

  1. 草草提交未完成的 feature,然后切换分支到 hotfix
  2. git stash | git stash pop 暂存工作内容,然后再切换到 hotfix

第二种方式较第一种还好很多,可是面对下面这些场景,stash 依旧不是很好的解决方案

我们面对的场景

  1. 正在 main 分支上跑长时间的测试,切换到 hotfix 或 feature, 测试就会中断
  2. 项目非常大,频繁的切换索引,成本非常高
  3. 有几年前 release 的旧版本,设置和当前不一样,IDE restructure 适配切换也会带来很大的开销
  4. 切换分支,需要重新设置相应的环境变量,比如 dev/qa/prod
  5. 需要切换到同事的代码,帮助调试代码复现问题

有的同学想到,git clone 多个 repo 不就可以了吗?这是解决上述问题的一个方法,但背后同样隐藏很多问题:

  1. 多个 repo 的状态是不好同步的,比如没办法快速 cherry-pick, 一个 repo checkout 的分支,另外一个 repo 需要重新 checkout
  2. git history/log 是重复的,当项目历史非常长,.git 文件夹下的内容是非常占用磁盘空间的
  3. 同一个项目,多个 repo,不易管理

那如何做才能满足这些特殊场景,又不出现这些上述这些问题呢?

git-worktree

其实,这是 Git 2015 年就开始支持的功能,却很少有人知道它&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值