Git分支
创建dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
-
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch
命令查看当前分支:
$ git branch
* dev
master
-
git branch
命令会列出所有分支,当前分支前面会标一个*号。
在dev上进行一系列修改后并提交
切回master分支,并将dev分支合并到master分支上 -
git merge
命令用于合并指定分支到当前分支
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
注意到上面的Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward
- 删除分支:
git branch -d <name>
还有一种命令也可以切换分支
创建并切换到新的dev分支,可以使用:
$ git switch -c dev
直接切换到已有的master分支,可以使用:
$ git switch master
-
git log --graph
命令可以看到分支合并图。
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
准备合并dev分支,请注意--no-ff
参数,表示禁用Fast forward
:
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
储藏
git stash
用于将工作区的内容储存起来
git stash list
储存区的内容
git stash apply
恢复
git stash drop
删除
git stash pop
=git stash apply
+git stash drop
恢复并删除
可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0}
Bug分支
在master分支上修复的bug,由于dev分支是从早期的master分支上分出来的,所以这个bug在dev上还是存在的,想要合并该bug修改到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
$ git branch
* dev
master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
- 如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除
多人协作
要查看远程库的信息,用git remote
:
$ git remote
origin
或者,用git remote -v
显示更详细的信息:
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支
$ git push origin master
如果要推送其他分支,比如dev
,就改成:
$ git push origin dev
抓取分支
git pull
Git标签管理
-
git tag <name>
就可以打一个新标签
如果要对某次提交打上标签,只需要在<name>
后面加上提交号就行了
$ git tag v0.9 f52c633
-
git tag
查看所有标签
标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>
查看标签信息 - 还可以创建带有说明的标签,用
-a
指定标签名,-m
指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
-
git tag -d <tagname>
可以删除一个本地标签 -
git push origin <tagname>
可以推送一个本地标签 -
git push origin --tags
可以推送全部未推送过的本地标签 - 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)
然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/<tagname>
$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
- [deleted] v0.9