An Interest In:
Web News this Week
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
Git Worktree
I am not sure why I had no idea about this gem. I have been using Git for almost 10 year and discovered this just few days back and from that time it has become an essential part of my workflow.
Scenario: Deep down working on a feature branch for an app, suddenly a big issue was found in production for which you have to find a solution and deploy hotfix
Here was my workflow:
Workflow 1
- Commit all my work in my feature branch, even when I know it's not even half done and obviously will not compile.
- Checkout master -> create hotfix branch --> make changes and deploy
- Checkout my feature branch, undo last commit, and start working again.
Workflow 2
- Stash changes to feature branch. Most of the time I will forget to stash untracked files, so stash again with a message "this also needs to be unstashed-- "
- Checkout master -> create hotfix branch --> make changes and deploy
- Checkout feature branch, pop up last stash and second last stash, continue working
The problem with above workflow was, if I move to work on something else, and come back after considerable time, I will not remember where I left, and god forbid If I have more stash changes and my stash message are not even understandable by me after a week.
How Git Worktree helped me out.
Now whenever I have to work on a feature, I add a new worktree. In case I have to go and work in another branch, I just change worktree folder and start working on that branch. I don't have to commit half or not working code or have to stash them (with appropriate message) anymore. I can just switch folder and start working in a new branch.
How to add a worktree
git worktree add -b "feature/your-branch-name"
Full list of commands for worktree
git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]] [-b <new-branch>] <path> [<commit-ish>]git worktree list [-v | --porcelain]git worktree lock [--reason <string>] <worktree>git worktree move <worktree> <new-path>git worktree prune [-n] [-v] [--expire <expire>]git worktree remove [-f] <worktree>git worktree repair [<path>]git worktree unlock <worktree>
Read more here
Let me know how you use worktree.
Thanks
Kumar Nitesh
Original Link: https://dev.to/knitesh/git-worktree-2km2
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To