You need to use Git worktree
on Dragoș Străinu's blogRecently I found git worktree
feature and I plan to use it in all my projects.
Here is why and how you can use it.
Why
If you are working on a big project with a lot of issues and tasks, you constantly have to switch between branches to do some quick-fix changes or maybe review a PR from a teammate. The problem is that often you have some work in progress and switching branches means that you need to commit or stash your WIP changes. If it's only 1-2 files/changes the cost of commit/stash is not that high. But if you work on a big feature with over 9000 changes it's hard to constantly change branches.
How
Basically git worktree
command allows to create a new directory with desired git state.
Actually, your current workspace is already in git worktree.
You can type git worktree list
and you will see one item, which is your current git workspace.
Let's say you work on a big feature in your work project.
git worktree list
~/Work/project 17d8aab [big-feature]
And a quick-fix needs to be done from the origin/master
.
You can create a git worktree with the following command:
git worktree add -b quick-fix ../quickfix origin/master
This command will create a new directory named quickfix at the same level as your project directory.
The branch will be quick-fix
and it will be set at commit from origin/master
.
You can see your git worktree:
git worktree list
~/Work/project 17d8aab [big-feature]
~/Work/quickfix 25e6c4b [quick-fix]
Next, you can navigate to quickfix directory, do your changes, push to remote, merge.
After you are done with quickfix you can remove the workspace with git worktree remove quickfix
.
Conclusion
This approach of using git worktree is not the most elegant but it's doing the job. I might change the workflow (using bare git repos instead of normal repos) and will update this post. For now you may check How to use git worktree and in a clean way.
But I suggest to play a bit with git worktree if you have problems from Why section. And adding this git feature to your toolkit will make you a more productive engineer.
Let me know if you have a nice workflow for git worktree!