当我们在维护公司项目时,可能会遇到这样的场景:我正在开发一个新功能,突然需要修一个Bug。
这个时候,有些同学是这样做的:
git add .
git commit -m 'WIP'
git checkout -b 新的分支名
...新的代码修改完成并push以后...
git checkout 老分支
...继续开发...
更有一些经验的同学,可能会这样写:
git stash
git checkout -b 新的分支
...新的代码修改完成并push以后...
git checkout 老分支
git stash pop
但如果在修这个Bug的时候,又来了一个更紧急的Bug需要修怎么办?到后面很容易就把前面的代码搞忘了。
其实我们有更好的办法,那就是使用git worktree
命令。这个命令甚至可以让你同时在10个分支上开发,并且1秒无负担切换到任意分支。
假设现在我所在的项目文件夹为/Users/kingname/Projects/JobCleaner
,在feature
分支。现在来了一个Bug需要修复,于是,我只需要执行如下命令:
git worktree add ../JobCleanerBugFix master
cd ../JobCleanerBugFix
git pull origin master
此时,Git会自动在/Users/kingname/Projects/
文件夹下面,创建一个新的文件夹JobCleanerBugFix
。并且这个代码已经在master分支了。你可以直接使用PyCharm或者任何其他的代码编辑器,打开这个文件夹,然后像正常开发一样修复Bug。
整个过程中,/Users/kingname/Projects/JobCleaner
始终是你之前开发新功能的代码,假设你之前的PyCharm有一个窗口开着这个文件夹,那么你随时可以正常在里面修改代码。
这个时候如果又来了一个更紧急的Bug了,那么你只需要在/Users/kingname/Projects/JobCleaner
里面再次执行代码,创建第三个文件夹即可:
git worktree add ../JobCleanerP0Bug master
cd ../JobCleanerP0Bug
git pull origin master
这三个文件夹互相独立,你的IDE可以分别打开这三个文件夹,同步修改任何代码。他们完全不会有任何影响,看起来就跟3个独立的项目一样。
理论上你可以无限这样添加。
当你在/Users/kingname/Projects/JobCleanerP0Bug
下面已经改完了代码,你只需要正常提交就可以了:
git add xxx.py yyy.py
git commit -m '修复bug'
git push origin master:bugfix
提交完成,确认没有任何问题以后,回到/Users/kingname/Projects/JobCleaner
文件夹,执行命令git worktree remove ../JobCleanerP0Bug/
,就会自动删除/Users/kingname/Projects/JobCleanerP0Bug
文件夹。
Copyright© 2013-2019