继续跟着廖老师的教程学习Git。
要修复一个bug/添加一个feature,可以考虑创建一个分支(Git的分支都是一样的没有特殊的),在分支上去修复它然后再合并。
stash存入
如果当前已经做了工作,有些还没add(下图中玫红色),有些add了但还没commit(下图中蓝色),用git status
查看一下:
但这时工作还没完成,不能commit,可以用git stash
将现场工作存储起来:
这时查看工作区和暂存区的状态,除了没有被Git管理的文件(下图中蓝色),是干净的:
而此时就和撤销了所有的修改和add一样,这些都被暂存起来了。用git stash list
可以查看到存起来的工作现场。
bug分支
把工作现场存好之后,就能放心地到处切换分支了。比如要在dev分支上修复一个bug,就要先切换到这个分支:
git checkout dev
新分支是基于当前分支而创建的,如果是在dev下新建分支issue,那么issue就是dev下的分支,issue分支的所有文件都继承了dev分支的所有文件。
然后在此基础上创建一个bug分支(就是普通的分支),分支名尽量体现bug(如bug编号):
git checkout -b bug-1234
然后修复bug,提交一下:
git add xxx
git commit -m "修复bug-1234"
再切回dev分支上,关闭Fast-forward地合并这个bug分支:
git checkout dev
git merge bug-1234 --no-ff -m "合并修复bug-1234" bug-1234
有需要再推到远程库一下,这时在dev分支上的bug就改完了。可以将bug分支删除(确保当前不在要删除的分支上):
git branch -d bug-1234
feature分支
当开发feature时也应该像改bug那样新建一个分支,然后合并到要添加这个feature的分支上。
使用上的区别主要在于,feature可能因为需求的改变而取消,但bug几乎不会,总归要改掉,要删除这样一个没有经过合并的分支,只要把-d
改成-D
即可强制删除。
stash恢复
切换回刚刚工作的分支上:
git checkout master
如果要恢复但不删除刚刚保存的stash记录,使用:
git stash apply
如果要恢复并删除最近的stash记录,使用:
git stash pop
总结
使用stash是必要的,因为暂存区是公用的,如果不通过stash命令隐藏,其内容会带到其它分支中。实际上只做了修改没做过add的文件切换分支也一样能看见,所以stash所隐藏的就是那些add到暂存区上的文件的改动。
最后引用一下你说_还要走么在廖老师教程下的总结:
工作区和暂存区是一个公开的工作台,任何分支都会用到,并能看到工作台上最新的内容,只要在工作区、暂存区的改动未能够提交到某一个版本库(分支)中,那么在任何一个分支下都可以看得到这个工作区、暂存区的最新实时改动。
使用git stash就可以将暂存区的修改藏匿起来,使整个工作台看起来都是干净的。所以要清理整个工作台,那么前提是必须先将工作区的内容都add到暂存区中去。之后在干净的工作台上可以做另外一件紧急事件与藏匿起来的内容是完全独立的。
也就是说没有做过git add
的文件是没法用git stash
隐藏起来的。