美文网首页
都2024年了,你还不知道git worktree么?

都2024年了,你还不知道git worktree么?

作者: 唯你Only | 来源:发表于2024-04-21 16:13 被阅读0次

三年前 python 大佬吉多·范罗苏姆(为 Python 程序设计语言的最初设计者及主要架构师)才知道 git worktree ,我现在才知道,我觉得没啥丢人的。

应用场景

如果你正在 feature 的分支中开发新功能,线上版本紧急错误又需要你基于 master 做修复。

可能有如下几种办法解决:

解法 1

  1. 将本地修改文件通过 git add . && git commit 提交到当前分支,或者通过 git stash 暂存起来
// feature branch
git add .
git commit
git checkout  master

// or
git stash
git checkout  master
  1. 分支切到 master,修复完问题后切回 feature
  2. 若之前是 commit 的可直接开发,若是 git stash 则 git stash pop 出来处理

解法 2

clone 一份同样远程代码到本地,切换到 master 分支来解决错误。

解法 1 缺点:

  1. 若正在跑一个耗时较长的测试不能动工作区代码,则只能等了
  2. 用 git stash 方式,暂存和切走到修改完错误切回 feature 至少得 4 步,命令行切来切去也挺麻烦

解法 2 缺点:若远程仓库太大,则 clone 一次会很耗时。

针对上述场景,可以考虑用 git worktree 来解决,该命令可让你直接开一个独立工作区域出去做别的事,未 commit 的档案原封不动留在原来分支。

它如何工作

  1. 首先创建一个本地文件夹 worktree_test 并在 worktree_test 文件夹内创建 master 分支,然后在 master 内 git init;
mkdir worktree_test && cd worktree_test && mkdir master && cd master/ && git init
  1. 先模拟构造一个主干分支 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"
  1. 构造完主干分支 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

相关文章

  • Git workTree

    添加worktree git worktree add [-f] [--checkout -b

  • 2020-08-12 git worktree 指南

    最简单的写法:git worktree add <新路径>将基于当前分支,新建一个 worktree 目录,新的分...

  • git worktree

    解决分支依赖冲突问题 在多分支协同开发过程中,node_modules被加入到.gitignore中不被git跟踪...

  • git worktree

    git worktree 记录 1. 切换到当前开发分支 cd project/risesin 2. 创建work...

  • git worktree usage

    EXAMPLESYou are in the middle of a refactoring session an...

  • 同时开发多分支:git worktree

    针对已经本地建好的分支:git worktree add ../[工作分支名] [工作分支名] 针对已经本地未建好...

  • git worktree 的使用

    在同一个git仓库中,经常会建立多个分支工作。在多个分支之间切换的时候,如果一个分支不是干净的,则需要暂存再切换,...

  • Git worktree 的使用

    假设这样一个场景,你做完了一个功能,正在跑漫长的测试。喝茶,上厕所,回来一看,这测试竟然还在跑。闲着也是闲着,修复...

  • 不变的你

    人到中年怎么了? 你不还是你么? 还不是那个有点漂亮有点拗气的你么? 还不是那个傻傻的小小的你么? 还不是那个悄悄...

  • 用微信这么久也不知道的微信小功能

    这年头,连学姐的奶奶都开始用微信了,谁还不会用微信啊?但你真的会使用微信的小功能么? 如果你都知道,很有可能你跟学...

网友评论

      本文标题:都2024年了,你还不知道git worktree么?

      本文链接:https://www.haomeiwen.com/subject/ehuvxjtx.html