都2024年了,你还不知道git worktree么?
三年前 python 大佬吉多·范罗苏姆(为 Python 程序设计语言的最初设计者及主要架构师)才知道 git worktree ,我现在才知道,我觉得没啥丢人的。
应用场景
如果你正在 feature 的分支中开发新功能,线上版本紧急错误又需要你基于 master 做修复。
可能有如下几种办法解决:
解法 1
- 将本地修改文件通过 git add . && git commit 提交到当前分支,或者通过 git stash 暂存起来
// feature branch
git add .
git commit
git checkout master
// or
git stash
git checkout master
- 分支切到 master,修复完问题后切回 feature
- 若之前是 commit 的可直接开发,若是 git stash 则 git stash pop 出来处理
解法 2
clone 一份同样远程代码到本地,切换到 master 分支来解决错误。
存在问题
解法 1 缺点:
- 若正在跑一个耗时较长的测试不能动工作区代码,则只能等了
- 用 git stash 方式,暂存和切走到修改完错误切回 feature 至少得 4 步,命令行切来切去也挺麻烦
解法 2 缺点:若远程仓库太大,则 clone 一次会很耗时。
针对上述场景,可以考虑用 git worktree 来解决,该命令可让你直接开一个独立工作区域出去做别的事,未 commit 的档案原封不动留在原来分支。
它如何工作
- 首先创建一个本地文件夹 worktree_test 并在 worktree_test 文件夹内创建 master 分支,然后在 master 内 git init;
mkdir worktree_test && cd worktree_test && mkdir master && cd master/ && git init
- 先模拟构造一个主干分支 master,向 rooi.txt 文件中写几行内容#1
//master
vi rooi.txt
cat rooi.txt
master:add:rooi.txt (#1)
git add rooi.txt
git commit -m "add:rooi.txt"
- 构造完主干分支 master 后,我们生成一个 feature 分支,该分支模拟开发功能分支,并写一些分支独有内容#2:feature:modify rooi.txt 和#4 生成一个临时 untracked file: a.temp
// new branch in master
git checkout -b feature
// feature
cat rooi.txt
master:add:rooi.txt (#1)
vi rooi.txt (#2)
cat rooi.txt
master:add:rooi.txt
feature:modify rooi.txt
git add rooi.txt (#3)
git commit -m "dev:modify"
[feature 4d300fb] dev:modify
1 file changed, 1 insertion(+)
touch a.temp (#4)
git status (#5)
Untracked files:
a.temp
线上紧急错误来了
此时我们在 feature 分支通过 git worktree add 建立一个工作区#1, 注意此时临时目录区在 d:\work\worktree_test 目录下
说明: git worktree add 中 ../bugfix 表示新建工作区名字,后面 master 表示跟进当前主干 master 分支来新建,也就是当前工作区 bugfix 是完全以 master 为基准建立的副本。
// d:\work\worktree_test\master in feature
git worktree add ../bugfix master (#1)
// to dir : d:\work\worktree_test
cd ..
// d:\work\worktree_test
ls
bugfix/ master/
cd bugfix
cat rooi.txt
master:add:rooi.txt
vi rooi.txt
cat rooi.txt
master:add:rooi.txt
bugfix:fix bug
git add rooi.txt (#3)
git commit -m "bugfix:fix bug"
如上,bugfix 分支是依照 master 分支构建工作区,此时可以直接提交到 master 分支上。
继续开发功能
通过#1 回到原来 master 目录下可以看到,之前提交和 untracked file 都存在,且在 feature 分支上,现场原样保持。
// in bugfix dir master
// d:\work\worktree_test\bugfix
cd ..
cd master (#1)
当然你也可以合并 bugfix 到 feature 分支
// feature
git merge master
如下效果图中,可以创建多个工作区副本
参考资料
It’s 2024, I Haven’t Used Git Worktree Yet | by David Lee | Mar, 2024 | Medium
都2024年了,你还不知道git worktree么?的更多相关文章
- 使用过Redis,我竟然还不知道Rdb
目录 使用过Redis,那就先说说使用过那些场景吧 Rdb文件是什么,它是干什么的 分析工具 小结 联想 推荐阅读 使用过Redis,那就先说说使用过那些场景吧 字符串缓存 //举例 $redis-& ...
- 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- JDK15就要来了,你却还不知道JDK8的新特性!
微信搜「烟雨星空」,白嫖更多好文. 现在 Oracle 官方每隔半年就会出一个 JDK 新版本.按时间来算的话,这个月就要出 JDK15 了.然而,大部分公司还是在使用 JDK7 和 8 . 之前去我 ...
- 都2019年了,还问GET和POST的区别
摘要: 对比GET与POST. 原文:都9102年了,还问GET和POST的区别 作者:程淇铭 Fundebug经授权转载,版权归原作者所有. 1. 前言 最近看了一些同学的面经,发现无论什么技术岗位 ...
- CentOS 8 都发布了,你还不会用 nftables?
原文链接:CentOS 8 都发布了,你还不会用 nftables? 如果你没有生活在上个世纪,并且是云计算或相关领域的一名搬砖者,那你应该听说最近 CentOS 8 官方正式版已经发布了,CentO ...
- [转帖]CentOS 8 都发布了,你还不会用 nftables?
CentOS 8 都发布了,你还不会用 nftables? https://www.cnblogs.com/ryanyangcs/p/11611730.html 改天学习一下 原文链接:CentOS ...
- git worktree 是什么及其使用场景
先上总结: 在git worktree出现之前, git切换分支前后的文件都只存在在当前文件夹下, git worktree出现之后, 我们可以将分支切换到其他文件夹下 比如如果你的项目有很多个版本分 ...
- 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...
- 接上篇:Git Worktree 高级使用,这样清爽多了
前言 上一篇文章 Git Worktree 大法真香 带大家了解了 git worktree 是如何帮助我同时在多个分支工作,并且互不影响的.但是创建 worktree 的目录位置不是在当前项目下,总 ...
- git worktree
git clone,不管是single-branch,还是non-single-branch,如果同时存在几个clone出来的branches,随着时间的推移,不停的编译.更新.编译...每个bran ...
随机推荐
- 在命令行中使用 cl.exe编译 C/C++ 程序并执行
cl.exe是Microsoft C/C++编译器. 我的VC6.0安装目录为:D:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev9 ...
- 并发CPU伪共享及优化
伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变量共享 ...
- KingbaseES 统计信息收集器没有响应问题分析
统计信息收集器没有响应/Stats collector is not responding 问题现象: kingbase数据库日志提示:统计信息收集器没有响应/Stats collector is n ...
- 软件发布版本号命名风格(GUN)
GUN风格: (1)产品初版时,版本号可以为0.1或0.1.0,也可以为1.0或1.0.0: (2)当产品进行了局部修改或bug修正时,主版本号和子版本号都不变,修正版本号+1: (3)当产品在原有的 ...
- lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(2)
前言 前篇我们已经介绍了 radash 的相关信息和部分 Array 相关方法,详情可前往主页查看: 本篇我们继续介绍 radash 中 Array 的其他相关方法: Radash 的 Array 相 ...
- #平衡树#洛谷 2611 [ZJOI2012]小蓝的好友
题目 在 \(R\times C\) 的矩形中,问有多少个子矩形使得存在一个给定点在其中, 保证点随机,\(R,C\leq 4\times 10^4,n\leq 10^5\) 分析 考虑容斥,用总方案 ...
- #Tarjan#洛谷 1407 [国家集训队]稳定婚姻
题目 分析 如果婚姻安全那么两个点不在同一个强连通分量, 考虑强制定方向,夫妻女向男连边,情侣男向女连边, 这样就直接用Tarjan有向图缩点就可以了 代码 #include <iostream ...
- SQL CREATE INDEX 语句- 提高数据库检索效率的关键步骤
SQL CREATE INDEX 语句 SQL CREATE INDEX 语句用于在表中创建索引. 索引用于比其他方式更快地从数据库中检索数据.用户无法看到索引,它们只是用于加速搜索/查询. 注意: ...
- 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理.化学和生物系统的基石.ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力.重点 ...
- 算法小白刷了一周 LeetCode 后的思考
Hi,我是 itchao 我自己工作有 2 两年多的前端开发经验,但是数据结构与算法一直不好,基本就是一个算法小白的水平. 听说大公司面试都要手写算法题,最近为了以后能去更好的公司,然后其实心里比较着 ...