当前功能开发到一半,要求先处理其他需求,怎么办?
相信各位程序猿对这个场景并不陌生。我猜你会这么做:
git stash save "当前功能"
git checkout other-branch
当你在 other-branch 上处理完其他需求了。你会回到 current-branch 上,通过git stash apply stash@{n} 恢复,继续之前的工作。
这是个常见的做法,下面来介绍另一种处理方法:git worktree。
什么是 git worktree
在 Git 中,工作树(Working Tree)是指当前检出的分支的文件系统视图。它包含了你正在处理的所有文件和目录。工作树是你进行代码编辑、添加新文件、修改文件和删除文件的地方。
具体来说,工作树包括以下几个部分:
-
工作目录(Working Directory) :
- 这是你在文件系统中看到的实际文件和目录。你可以在这里进行文件的编辑、添加、删除等操作。
-
暂存区(Staging Area) :
- 也称为索引(Index)。这是一个中间区域,用于暂存你准备提交的更改。你可以使用
git add命令将文件的更改添加到暂存区。
- 也称为索引(Index)。这是一个中间区域,用于暂存你准备提交的更改。你可以使用
-
HEAD:
- HEAD 是一个指针,指向当前检出的分支的最新提交。它表示你当前工作树的状态。
工作树的主要作用是提供一个工作空间,让你可以对代码进行修改和测试。你可以在工作树中进行各种操作,然后将更改提交到 Git 仓库中。
Git 支持多工作树(Multiple Working Trees),允许你在同一个仓库中同时处理多个分支。你可以使用 git worktree 命令来创建和管理多个工作树。这样,你可以在不同的工作树中独立地进行开发,而不会相互干扰。
git worktree 实用案例
以下是使用 git worktree 命令来创建和管理多个工作树的实用例子:
使用 git worktree 创建和管理多个工作树
假设你正在开发一个项目,并且需要同时处理两个不同的功能分支 feature-branch 和 bugfix-branch。你可以使用 git worktree 来创建和管理多个工作树,以便同时处理这两个分支。
1. 创建一个新的工作树
首先,确保你在主分支上:
git checkout main
然后,创建一个新的工作树来处理 feature-branch:
git worktree add ../feature-branch feature-branch
这将在当前仓库的父目录中创建一个名为 feature-branch 的新目录,并将 feature-branch 分支检出到这个新目录中。
2. 在新的工作树中进行开发
现在,你可以在 ../feature-branch 目录中进行开发:
cd ../feature-branch
进行一些更改
echo "New feature" >> feature.txt
git add feature.txt
git commit -m "Add new feature"
3. 创建另一个工作树来处理 bugfix-branch
回到主目录:
cd ../your-repo
创建一个新的工作树来处理 bugfix-branch:
git worktree add ../bugfix-branch bugfix-branch
这将在当前仓库的父目录中创建一个名为 bugfix-branch 的新目录,并将 bugfix-branch 分支检出到这个新目录中。
4. 在新的工作树中进行修复
现在,你可以在 ../bugfix-branch 目录中进行修复:
cd ../bugfix-branch
进行一些修复
echo "Bug fix" >> fix.txt
git add fix.txt
git commit -m "Fix bug"
5. 查看所有工作树
你可以使用以下命令查看所有工作树:
git worktree list
输出可能如下:
/path/to/your-repo 1234567 [main]
/path/to/feature-branch 89abcde [feature-branch]
/path/to/bugfix-branch fghijkl [bugfix-branch]
6. 删除一个工作树
如果你完成了某个分支的工作,可以删除对应的工作树:
git worktree remove ../feature-branch
通过使用 git worktree,你可以在同一个仓库中同时处理多个分支,而不需要频繁地切换分支。这对于并行开发和修复非常有用。