git branch
git branch -r, 查看远端库的分支情况
git branch -a, 查看所有分支
git branch -vv, 查看当前本地分支与远程分支的映射关系
git branch, 新建本地分支
$ git checkout -b dev origin/dev
# 远程分支dev已存在时,用此命令建立本地分支,同时设置tracking映射。
git branch -m | -M old_branch new_branch,重命名分支,如new_branch已存在,则用-M强制重命名。
git branch -d | -D branch_name, 删除branch_name分支
git branch -d -r branch_name, 删除远程branch_name分支
git branch –set-upstream-to=origin/dev [dev],映射本地dev分支与远程origin/dev分支(如果failed,则先用git pull更新本地的远程分支信息)
git branch -u origin/dev [dev],同上
git branch [–set-upstream | –track | –no-track] [-l] [-f] branch_name [start-point]
git branch –unset-upstream [branch_name],撤销本地分支与远程分支的映射关系
git remote
git remote,查看远程分支(简略)
git remote -v,查看远程分支(详细)
git push
- git push <远程主机名> <本地分支名>:<远程分支名>
git push origin DEV:dev,将本地DEV分支push到远程主机origin的dev分支上。
git push origin [空]:<远程分支名>,默认删除远程分支,等价于 git branch -d -r <远程分支名>。
注:即使没有使用git pull更新本地的远程分支,都有效。
git push origin –delete DEV,删除远程分支DEV
等价于 git push origin [空]:DEV,以及 git branch -d -r DEV
git push origin HEAD:DEV, 将当前本地分支推送到远程origin的DEV分支(方便易用)
示例
$ git push origin master
将本地master分支推送到origin主机的master分支。如果master不存在,则会被新建。$ git push origin :master
$ git push origin --delete master
删除origin主机的master分支$ git push -u origin master
将本地的master分支推送到origin主机,同时(-u)指定origin为默认主机,后面就可以不加任何参数使用git push了,即 git push (本地与远程分支不同名时,不可用)。git push
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
注:单个本地分支可以track多个远程分支。$ git config --global push.default matching
$ git config --global push.default simple
Git 2.0版本之前,默认采用matching方法,会推送所有有对应的远程分支的本地分支。
Git 2.0版本之后,默认采用simple方式,只推送当前分支至同名远程分支(即push your code branch by branch)。$ git push origin HEAD
将当前分支推送到远程的同名的简单方法$ git push origin HEAD:master
将当前分支推送到源存储库中的远程引用匹配主机。 这种形式方便推送当前分支,而不考虑其本地名称。
git pull
取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
默认模式下,git pull是git fetch后跟git merge FETCH_HEAD的缩写。
(Fetch from and integrate with another repository or a local branch)
语法
$ git pull <远程主机名> <远程分支名>:<本地分支名>
<本地分支名>可省略,如为当前分支。$ git branch --set-upstream master origin/next
上面命令指定本地master分支追踪origin/next分支。$ git pull origin
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。$ git pull
如果当前分支只有一个追踪分支,连远程主机名都可以省略。
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
如果合并需要采用rebase模式,可以使用–rebase选项。
注:在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。
git rebase
git rebase 之后再推送(push),会改变log曲线,按照各个协作者推送的顺序来单线排列。
- rebase操作可以把本地未push的分叉提交历史整理成直线。
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
git tag
$ git tag tag_name [commit_id]
给指定commit打标签; 默认标签打在HEAD最新提交的commit上。$ git tag -a tag_name -m "version xx released" commit_id
创建带有说明的标签,用-a指定标签名,-m指定说明文字。$ git tag
查看tag列表(简略)。$ git show tag_name
查看某个tag的详细说明信息。$ git tag -d tag_name
删除某个标签(创建的标签只本地存储,不自动远程推送;打错的标签可在本地安全删除)。$ git push origin tag_name
单独推送某个标签。$ git push origin --tags
一次性推送全部尚未推送到远程的本地标签。
如果某个标签已经推送到远程,删除步骤如下:
$ git tag -d tag_name
, 先从本地删除。$ git push origin :refs/tags/tag_name
,用push删除远程标签(refs/tags/固定)。
注:标签总是和某个commit挂钩。如果此tag关联的commit既出现在master分支,又出现在dev分支,则两个分支上都可以看到这个标签。