我经常同时处理多个功能,这导致我隐藏更改并在切换到其他任务时忘记它们。我尝试使用 git hooks 和终端别名作为提醒,但它们要么太麻烦,要么很容易被忽略。所以,我必须找到更好的解决方案。
这篇文章最初发布在我的博客上一年多前,但我不断回来查看它。重新分享给世界:)
Git 将信息存储为快照列表。 快照是存储库在给定时间点的存储版本。每次提交都代表 git 世界中的一个快照。
工作树是项目一个版本的单次签出。这些文件从 Git 目录中的压缩数据库中提取出来,并放置在磁盘上供您使用或修改。这是您在暂存和提交之前进行工作的地方。
Git Worktrees 是一种同时管理多个 git 工作树的方法,无需 git stash 的麻烦。它们允许我们将分支作为存储库的子目录进行工作,从而完全减轻在需要紧急、不相关的更改时隐藏更改的痛苦。
worktree 模块允许您在存储库的同一根目录中的单独子目录中签出项目的多个版本。传统方法如下图所示:
在此示例中,我有两个隐藏的更改(可能是数百行代码)和 3 个分支,feature-1、feature-2 和 fix -1。当我完成 fix-1 分支的工作并推送它时,我的大脑会跳到下一个任务并完全忘记以前的功能,直到我再次想起它们。
相反,使用工作树,它看起来像这样:
对于工作树,目录结构将每个工作树(分支)包含在单独的目录中。这使我能够通过更改当前工作的目录来无缝地从一个分支切换到另一个分支。我使用这种方法的通常工作流程包括以下内容:
当我想从一个工作树切换到另一个工作树时,我所要做的就是使用相同的步骤创建一个不同的工作树(如果我还没有创建它),或者简单地使用 VSCode 打开一个不同的目录并开始破解立即地。
创建工作树就像为现有分支运行 git worktree add Directory-name Branch-name 或运行 git worktree add Directory-name -b Branch-name 来创建新分支一样简单。
完成分支上的工作后,您可以安全地删除工作树以停止污染您的目录结构。只需运行 git worktreeremovedirectory-name 即可。这不会删除底层分支,因此您可以稍后安全地再次检查它们。
工作树是存储库分支的签出,因此不会复制未跟踪的文件。像 .env 这样的文件不会被复制,因此请确保在创建工作树后复制它们并安装依赖项(如果存在)。
另请注意,在根存储库目录中执行时,为工作树创建的目录将显示在 git 状态日志中。不过,与忘记工作时间相比,这些问题对我来说不算什么。
感谢您的阅读!您可以在我的博客上阅读更多内容并在 GitHub 赞助商上支持我的工作!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3