我们在学习git branch之前,首先要理解分支(branch)的概念。Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。
Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次
提交的时候都会自动向前移动。如图1所示:
图 1
master 分支
创建分支很简单,例如我要创建一个名为topic的分支,直接用下面的命令:
这就创建了分支topic,如图2所示。
图2
master和topic分支
现在我们的Git仓库有了两个分支,那么Git是怎么知道我们当前在哪个分支上呢?这里又将引入一个特殊的HEAD指针。在 Git 中,
它是一个指向你正在工作中的本地分支的指针。执行上面的Git命令仅仅是创建一个本地的新的分支,并不会切换到新的分支去。
如图3:
图3
当前分支为master分支
如果要切换到新的分支,还要运行下面的命令。
此时,HEAD指针将指向topic分支,如图4:
图4
当前分支为topic分支
其实,我们也可以用一个命令来实现创建并切换到新的分支。
-
$ git checkout -b topic master # 在master分支的基础上创建新分支topic,并切换到topic。
当然,我们也可以显示的指定创建新分支的开始点,及从哪个分支的哪个提交(commit)创建新的分支。
-
$ git branch topic release
-
# 从release分支创建新分支topic
-
-
$ git branch topic cf123ed
-
# 从ID为cf123ed的commit创建新分支topic
-
-
$ git branch topic v1.2.0
-
# 从tag v1.2.0处创建新分支topic
创建跟踪分支(Tracking branches)
[1]
-
$ git branch --track release origin/release
-
Branch release set up to track remote branch release from origin[2].
创建好跟踪分支后,当运行git pull release命令时,git会自动从 ‘origin' 抓取(fetch)内容,再把远程的
'origin/release' 分支合并进(merge)本地的'release'分支。
有时候,我们可能想创建一个没有任何提交的空分支来做一些特殊的任务,下面的命令将创建一个空的分支
-
$ git symbolic-ref HEAD refs/heads/newbranch
-
$ rm .git/index
-
$ git clean -fdx
-
$ git branch
-
master
-
* next
*表示当前分支为next分支。
-
$ git branch -r
-
origin/HEAD -> origin/master
-
origin/maint
-
origin/master
-
origin/next
-
origin/pu
-
origin/todo
-
$ git branch -a
-
master
-
* next
-
remotes/origin/HEAD -> origin/master
-
remotes/origin/maint
-
remotes/origin/master
-
remotes/origin/next
-
remotes/origin/pu
-
remotes/origin/todo
以remotes开始的为远程分支
绿色字体,没有remotes的为本地分支
蓝色字体。当前处于next分支。
-
$ git branch -v
-
master f8abaeb Merge branch 'maint'
-
* next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
当然也可以组合使用。
-
$ git branch -va
-
master f8abaeb Merge branch 'maint'
-
* next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
-
remotes/origin/HEAD -> origin/master
-
remotes/origin/maint 531c8dd fixup-builtins: retire an old transition helper script
-
remotes/origin/master f8abaeb Merge branch 'maint'
-
remotes/origin/next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
-
remotes/origin/pu 0d79431 Merge branch 'jc/push-cas' into pu
-
remotes/origin/todo 5b867dd What's cooking (2013/07 #02)
-
$ git branch -vr
-
origin/HEAD -> origin/master
-
origin/maint 531c8dd fixup-builtins: retire an old transition helper script
-
origin/master f8abaeb Merge branch 'maint'
-
origin/next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
-
origin/pu 0d79431 Merge branch 'jc/push-cas' into pu
-
origin/todo 5b867dd What's cooking (2013/07 #02)
当我们删除一个合并(merge)后分支可以用git branch命令带参数
-d。
-
$ git branch -d topic1
-
Deleted branch topic1 (was d972dec).
如果分支已经有了新的提交且没有被合并(merge),那么你将被提示下面的错误信息。
-
$ git branch -d topic
-
error: The branch 'topic' is not fully merged.
-
If you are sure you want to delete it, run 'git branch -D topic'.
所以,如果你仍旧要删除这样的分支,你需要使用参数
-D 。
-
$ git branch -D topic
-
Deleted branch topic (was 50590b4).
所以请谨慎使用
-D 参数。
至此,我们介绍了git branch的基本概念及常用的命令。如果想更深入的理解分支及分支的管理。可以参看的。
注:
[1] 跟踪分支(Tracking branches)是用来同步本地分支和远程分支的。如果你在’跟踪分支'(Tracking Branches)上执行推送(push)或拉
取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上。
[2] origin是原始Git仓库地址的别名(alias)。
阅读(7977) | 评论(3) | 转发(1) |