远程分支
默认的,远程数据库只有一个master
分支,可以在远程数据库创建其他的分支,也可以在本地数据库使用命令,将本地的分支推送到远程分支
如果push
的时候,没有指定远程的地址,默认会使用名称为 origin
的地址
如果push
的时候,没有指定远程的分支,默认会使用master
分支
推送本地分支到远程
命令push
可以将本地所在的分支推送到指定的远程分支
在lmonkey中操作
$ git checkout develop
$ git push origin develop
如果远程没有这个分支,会自动创建这个分支
拉取远程分支到本地
在lmonkey2中操作
由于lmonkey把自己的develop分支推送到了远程数据库,而lmonkey2的本地数据库并没有这个develop分支,可以基于原始数据库中的develop分支来创建develop分支:
$ git checkout -b develop origin/develop
git checkout -b <new branch> <from branch>
可以创建并切换分支,如果不写最后一个参数,默认以当前所在分支为基础创建新的分支
在lmonkey中操作
新建文件 新功能.txt
,并提交到数据库:
$ cd ../lmonkey
$ echo '新功能' >> 新功能.txt
$ git status
在使用git status
的时候,中文文件名可能会出现如\231\121\121
的样子,对Git重新设置一下即可:
$ git config --global core.quotepath off
最后提交到本地数据库,并推送到远程的develop分支:
$ git add.
$ git commit -m "新功能"
$ git push origin develop
在lmonkey2中操作
使用pull
可以拉取远程分支到本地
$ git pull origin develop
注意
这个拉取操作,会把远程develop分支合并到当前所在的分支,因为pull = fetch + merge
拉取远程分支,还可以使用fetch
命令:
$ git fetch
$ git merge origin develop
如果两个分支没有共同祖先,无法直接合并,此时可以使用
git pull origin master --allow-unrelated-histories
如果是
fetch
了之后再合并也是一样的git fetch origin master
git merge origin/master --allow-ubrelated-histories
标签
标签是为了更方便地参考提交而给它标上易懂的名称。
Git可以使用 2 种标签: 轻标签和注解标签。打上的标签是固定的不能像分*样可以移动位置。
轻标签
使用tag
命令来添加标签,在<tagname>
执行标签的名称
$ git tag <tagname>
- 添加名称
注解标签
若要添加注解标签,可以在tag命令指定 -a选项执行。执行后会启动编辑区,请输入注解,也可以指定-m选项来添加注解。
$ git tag -a <tagname>
- 添加名称
- 添加注解
- 添加签名
一般情况下,发布标签是采用注解标签来添加注解或签名的,轻标签是为了在本地暂时使用或一次性使用
事前准备
首先建立一个新目录,并在里面建立一个空数据库。这里我创建了一个名为lmonkey的目录
$ mkdir lmonkey
$ cd lmonkey
$ git init
初始化数据库之后,我们在创建一个myfile.txt的档案,然后提交:
$ echo '学习Git' >> myfile.txt
$ git add myfile.txt
$ git commit -m "first commit"
目前的历史记录是这样的
添加轻标签
在 HEAD
指向的提交里添加名为apple的标签:
$ git tag apple
如果没有使用参数而执行 tag, 可以显示标签列表
$ git tag
//标签列表
如果在 log
命令添加 --decorate
选项执行,可以显示包含标签资料的历史记录:
$ git log --decorate
//包含标签资料的历史记录
添加注解标签
在HEAD
指向的提交里添加名为banana的标签,请执行以下的命令。
$ git tag -am "学习Git" banana
如果在tag命令指定-n选项执行,可以显示标签的列表和注解。
$ git tang -n
// 标签的列表和注解
删除标签
若要删除标签,在tag命令指定 -d选项执行。
$ git tang -d <tagname>
应用
以某个标签为基础,新建并切换一个新分支:
$ git checkout -b <branchName> <tagName>
因为 tag 本身指向的就是一个 commit , 所以和根据 commitid
检出分支是一个道理
$ git checkout -n <branchName> <commitid>
可以已提交id为基础新建并切换出一个新分支