”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Git 工作树提高我的工作效率

使用 Git 工作树提高我的工作效率

发布于2024-11-03
浏览:521

我经常同时处理多个功能,这导致我隐藏更改并在切换到其他任务时忘记它们。我尝试使用 git hooks 和终端别名作为提醒,但它们要么太麻烦,要么很容易被忽略。所以,我必须找到更好的解决方案。

这篇文章最初发布在我的博客上一年多前,但我不断回来查看它。重新分享给世界:)

简而言之,Git

Git 将信息存储为快照列表。 快照是存储库在给定时间点的存储版本。每次提交都代表 git 世界中的一个快照。

工作树是项目一个版本的单次签出。这些文件从 Git 目录中的压缩数据库中提取出来,并放置在磁盘上供您使用或修改。这是您在暂存和提交之前进行工作的地方。

Git 工作树

Git Worktrees 是一种同时管理多个 git 工作树的方法,无需 git stash 的麻烦。它们允许我们将分支作为存储库的子目录进行工作,从而完全减轻在需要紧急、不相关的更改时隐藏更改的痛苦。

worktree 模块允许您在存储库的同一根目录中的单独子目录中签出项目的多个版本。传统方法如下图所示:

Boosting My Productivity With Git Worktrees

在此示例中,我有两个隐藏的更改(可能是数百行代码)和 3 个分支,feature-1feature-2fix -1。当我完成 fix-1 分支的工作并推送它时,我的大脑会跳到下一个任务并完全忘记以前的功能,直到我再次想起它们。

相反,使用工作树,它看起来像这样:

Boosting My Productivity With Git Worktrees

对于工作树,目录结构将每个工作树(分支)包含在单独的目录中。这使我能够通过更改当前工作的目录来无缝地从一个分支切换到另一个分支。我使用这种方法的通常工作流程包括以下内容:

  1. 在项目目录中打开终端
  2. 创建具有分支名称的工作树
  3. 代码 。在worktree目录中打开VSCode

当我想从一个工作树切换到另一个工作树时,我所要做的就是使用相同的步骤创建一个不同的工作树(如果我还没有创建它),或者简单地使用 VSCode 打开一个不同的目录并开始破解立即地。

创建工作树

创建工作树就像为现有分支运行 git worktree add Directory-name Branch-name 或运行 git worktree add Directory-name -b Branch-name 来创建新分支一样简单。

删除工作树

完成分支上的工作后,您可以安全地删除工作树以停止污染您的目录结构。只需运行 git worktreeremovedirectory-name 即可。这不会删除底层分支,因此您可以稍后安全地再次检查它们。

陷阱

工作树是存储库分支的签出,因此不会复制未跟踪的文件。像 .env 这样的文件不会被复制,因此请确保在创建工作树后复制它们并安装依赖项(如果存在)。

另请注意,在根存储库目录中执行时,为工作树创建的目录将显示在 git 状态日志中。不过,与忘记工作时间相比,这些问题对我来说不算什么。


感谢您的阅读!您可以在我的博客上阅读更多内容并在 GitHub 赞助商上支持我的工作!

版本声明 本文转载于:https://dev.to/kl13nt/using-git-worktrees-to-boost-my-productivity-18m4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python 的 If 语句中何时使用 and 关键字进行逻辑连接?
    Python 的 If 语句中何时使用 and 关键字进行逻辑连接?
    Python If 语句中的逻辑 AND在 Python 中使用 if 语句时,必须使用正确的逻辑运算符来计算多个条件。逻辑与运算符在许多编程语言中用 && 表示,它评估两个操作数的真实性,并且仅当两个操作数都为 true 时才返回 True。但是,在 Python 的 if 语句中,&& 不被识别...
    编程 发布于2024-11-08
  • 什么是 Redux,我们如何使用它?
    什么是 Redux,我们如何使用它?
    What is Redux, and how do we use it? Redux is like a helpful tool for managing the state of JavaScript programs. It helps keep everything organized an...
    编程 发布于2024-11-08
  • 唯一索引可以删除具有现有重复项的表中的重复项吗?如何删除?
    唯一索引可以删除具有现有重复项的表中的重复项吗?如何删除?
    通过唯一索引去重为了防止重复数据插入,错误地为字段A、B创建了普通索引, C、D,导致2000万条记录的表中存在重复记录。问题出现了:为这些字段添加唯一索引会在不影响现有字段的情况下删除重复项吗?更正索引并处理重复项添加唯一索引不带 IGNORE 修饰符的 ALTER TABLE 语句将失败,因为唯...
    编程 发布于2024-11-08
  • Java 中的 Setters 和 Record
    Java 中的 Setters 和 Record
    record是一种结构,其特点是不可变,也就是说,一旦创建了record类型的对象,它的属性不能修改,它相当于其他编程语言所说的data-class或DTO(数据传输对象)。但是,如果需要使用setter方法修改某个属性,并且考虑到记录中的每个属性都是final类型,那么如何实现呢? 为了证明这是否...
    编程 发布于2024-11-08
  • 利用剩余参数
    利用剩余参数
    我今天浏览了node.js材料,并使用了path.join方法。该方法在node.js中被广泛使用。 path.join("/foo", "bar"); // Returns: '/foo/bar' path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')...
    编程 发布于2024-11-08
  • 如何从导入的 CSV 文件中删除 BOM?
    如何从导入的 CSV 文件中删除 BOM?
    从导入的 CSV 文件中删除 BOM导入 .csv 文件时,经常会遇到 BOM(字节顺序标记),它可能会干扰数据处理。可以通过从文件中删除 BOM 来解决此问题。删除 BOM 的一种方法是使用正则表达式:$new_file = preg_replace('/[\x00-\x1F\x80-\xFF]/...
    编程 发布于2024-11-08
  • ## 为什么模板基类的多重继承会导致成员函数解析不明确?
    ## 为什么模板基类的多重继承会导致成员函数解析不明确?
    消除多重继承的歧义使用模板基类处理多重继承时,会出现关于不明确成员函数解析的潜在问题。考虑以下场景:template <typename ... Types> class Base { public: template <typename T> typename st...
    编程 发布于2024-11-08
  • 如何向字典条目等类添加动态属性?
    如何向字典条目等类添加动态属性?
    向类添加动态属性在使用模拟类模拟数据库结果集的过程中,出现了一个挑战:如何分配动态属性实例的属性类似于字典的属性。这涉及创建行为类似于具有特定值的属性的属性。最初,一种有前景的方法涉及使用以下方式分配属性:setattr(self, k, property(lambda x: vs[i], self...
    编程 发布于2024-11-08
  • 使用failsafe-go 库实现微服务之间通信的弹性
    使用failsafe-go 库实现微服务之间通信的弹性
    Let's start at the beginning. What is resilience? I like the definition in this post: The intrinsic ability of a system to adjust its functioning prio...
    编程 发布于2024-11-08
  • 系统集成测试:确保无缝软件集成
    系统集成测试:确保无缝软件集成
    在软件开发的动态环境中,确保系统的各个组件或模块无缝地协同工作对于提供可靠且高性能的软件解决方案至关重要。这篇博文深入探讨了系统集成测试 (SIT),这是软件测试生命周期中的一个关键阶段,用于验证集成组件之间的交互,确保系统的整体功能和可靠性。 什么是系统集成测试? 系统集成测试 (SIT) 是软...
    编程 发布于2024-11-08
  • 事件冒泡和捕获 - 像 5 岁一样学习
    事件冒泡和捕获 - 像 5 岁一样学习
    来吧,“像五岁一样学习”只是一个短语——我不是在这里讲一个玩具故事!但我保证,如果你从头到尾仔细阅读,一切都会有意义。 事件冒泡和捕获是在 JavaScript 中触发事件时事件如何通过 DOM(文档对象模型)传播(或传播)的两个阶段。现在,这个说法需要澄清事件传播的概念。 事件传播...
    编程 发布于2024-11-08
  • 如何将变量从一个页面发送到另一个 flutter/dart
    如何将变量从一个页面发送到另一个 flutter/dart
    您好,我目前正在尝试在连接步骤期间将用户的变量条目传递到我的应用程序的主页,但我遇到错误,我不知道是什么原因导致的,在我的页面 main (gamepage) 中,在男孩的孩子中,我想显示控制器的地址,但是 flutter 告诉我这个变量没有定义!!! 你是我唯一的希望 import 'dart:c...
    编程 发布于2024-11-08
  • 如何在 HTML 中使用 PHP?
    如何在 HTML 中使用 PHP?
    要在 HTML 中使用 PHP,必须用 PHP 开始标记 . 在本文中,我们将通过示例学习如何在 HTML 中使用 PHP。 PHP(超文本预处理器) 是一种用于 Web 开发的流行服务器端脚本语言。它允许您将动态内容嵌入到您的HTML。 在 HTML 中使用 PHP 的方法 要在 HTML 中有效...
    编程 发布于2024-11-08
  • 使用 LangSmith Hub 改变您的工作流程:JavaScript 工程师的游戏规则改变者
    使用 LangSmith Hub 改变您的工作流程:JavaScript 工程师的游戏规则改变者
    分散的人工智能提示是否会减慢您的开发进程?了解 LangChain Hub 如何彻底改变您的工作流程,为 JavaScript 工程师提供无缝且高效的即时管理。 介绍 想象一下管理一个项目,其中关键信息分散在文件中。令人沮丧,对吧?这就是处理 AI 提示的开发人员面临的现实。 Lan...
    编程 发布于2024-11-08
  • 如何在 PHP 中将数值转换为字符串表示形式?
    如何在 PHP 中将数值转换为字符串表示形式?
    将数值转换为 PHP 中的字符串表示形式将数值转换为 PHP 中相应的字符串版本是一项常见任务,尤其是在工作时与文本处理或面向用户的应用程序。当处理特定范围内的值时,这种转换变得尤其重要,例如将数字从 1 到 99 转换为其等效文本。要执行此转换,我们可以利用 PEAR 包 Numbers_Word...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3