幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash现在,用git status查看工作区,就是干净的(除非有没有被 Git 管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
git checkout mastergit checkout -b issue-101
现在修复bug,然后提交:
git add readme.mdgit commit -m "fix bug 101"
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git checkout mastergit merge --no-ff -m "merged bug fix 101" issue-101
太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!
git checkout devgit status
工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:
git stash list工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
git stash pop再用git stash list查看,就看不到任何stash内容了。
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令
git stash apply stash@{0}标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id。
git tag -a <tagname> -m "blablabla..."可以指定标签信息。
还可以通过-s用私钥签名一个标签:
git tag -s v0.5 -m "signed version 0.2 released" fec145agit tag可以查看所有标签。
用命令git show <tagname>可以查看某个标签的详细信息。
如果标签打错了,也可以删除:
git tag -d v0.1因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname>:
git push origin v1.0或者,一次性推送全部尚未推送到远程的本地标签:
git push origin --tags如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/v0.9忽略特殊文件
在安装Git一节中,我们已经配置了user.name 和user.email,实际上,Git还有很多可配置项。
比如,让Git显示颜色,会让命令输出看起来更醒目:
git config --global color.ui true有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files…,有强迫症的童鞋心里肯定不爽。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在 Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
当然也可以配置全局忽略的文件,这样就不用每个项目都加gitignore了:
git config --global core.excludesfile '~/.gitignore'配置别名
有没有经常敲错命令?比如git status?status这个单词真心不好记。
如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。
我们只需要敲一行命令,告诉Git,以后st就表示status:
git config --global alias.st status