Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6258763
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: 系统运维

2013-08-07 00:31:56

原文地址:Git命令之git branch 作者:a-plus

Git命令之git branch

By Harrison Feng

  • 分支(branch)的概念

我们在学习git branch之前,首先要理解分支(branch)的概念。Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。
Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次
提交的时候都会自动向前移动。如图1所示:










图 1 master 分支
  • 创建分支(branch)

创建分支很简单,例如我要创建一个名为topic的分支,直接用下面的命令:
  1. $ git branch topic
这就创建了分支topic,如图2所示。

图2 master和topic分支
现在我们的Git仓库有了两个分支,那么Git是怎么知道我们当前在哪个分支上呢?这里又将引入一个特殊的HEAD指针。在 Git 中,
它是一个指向你正在工作中的本地分支的指针。执行上面的Git命令仅仅是创建一个本地的新的分支,并不会切换到新的分支去。
如图3:

图3 当前分支为master分支
如果要切换到新的分支,还要运行下面的命令。
  1. $ git checkout topic
此时,HEAD指针将指向topic分支,如图4:

图4 当前分支为topic分支
其实,我们也可以用一个命令来实现创建并切换到新的分支。
  1. $ git checkout -b topic master      # 在master分支的基础上创建新分支topic,并切换到topic。
当然,我们也可以显示的指定创建新分支的开始点,及从哪个分支的哪个提交(commit)创建新的分支。
  1. $ git branch topic release
  2. # 从release分支创建新分支topic

  3. $ git branch topic cf123ed
  4. # 从ID为cf123ed的commit创建新分支topic

  5. $ git branch topic v1.2.0
  6. # 从tag v1.2.0处创建新分支topic
创建跟踪分支(Tracking branches)[1]
  1. $ git branch --track release origin/release
  2. Branch release set up to track remote branch release from origin[2].
创建好跟踪分支后,当运行git pull release命令时,git会自动从 ‘origin' 抓取(fetch)内容,再把远程的
'origin/release' 分支合并进(merge)本地的'release'分支。
有时候,我们可能想创建一个没有任何提交的空分支来做一些特殊的任务,下面的命令将创建一个空的分支
  1. $ git symbolic-ref HEAD refs/heads/newbranch
  2. $ rm .git/index
  3. $ git clean -fdx
  • 查看分支(branch)

  • 查看当前处在哪个分支。
  1. $ git branch
  2. master
  3. * next
*表示当前分支为next分支。
  • 查看所有远程(remote)的分支
  1. $ git branch -r
  2. origin/HEAD -> origin/master
  3. origin/maint
  4. origin/master
  5. origin/next
  6. origin/pu
  7. origin/todo
  • 查看所有分支(包括远程和本地)
  1. $ git branch -a
  2. master
  3. * next
  4. remotes/origin/HEAD -> origin/master
  5. remotes/origin/maint
  6. remotes/origin/master
  7. remotes/origin/next
  8. remotes/origin/pu
  9. remotes/origin/todo
以remotes开始的为远程分支绿色字体,没有remotes的为本地分支蓝色字体。当前处于next分支。
  • 查看每个分支的最后一个提交(commit)
  1. $ git branch -v
  2. master f8abaeb Merge branch 'maint'
  3. * next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
当然也可以组合使用。
  • 查看所有分支的最后一个提交(commit)
  1. $ git branch -va
  2. master f8abaeb Merge branch 'maint'
  3. * next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
  4. remotes/origin/HEAD -> origin/master
  5. remotes/origin/maint 531c8dd fixup-builtins: retire an old transition helper script
  6. remotes/origin/master f8abaeb Merge branch 'maint'
  7. remotes/origin/next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
  8. remotes/origin/pu 0d79431 Merge branch 'jc/push-cas' into pu
  9. remotes/origin/todo 5b867dd What's cooking (2013/07 #02)
  • 查看远程分支的最后一个提交(commit)
  1. $ git branch -vr
  2. origin/HEAD -> origin/master
  3. origin/maint 531c8dd fixup-builtins: retire an old transition helper script
  4. origin/master f8abaeb Merge branch 'maint'
  5. origin/next 2e1bdd9 Merge branch 'as/log-output-encoding-in-user-format' into next
  6. origin/pu 0d79431 Merge branch 'jc/push-cas' into pu
  7. origin/todo 5b867dd What's cooking (2013/07 #02)
  • 删除分支(branch)

当我们删除一个合并(merge)后分支可以用git branch命令带参数 -d
  1. $ git branch -d topic1
  2. Deleted branch topic1 (was d972dec).
如果分支已经有了新的提交且没有被合并(merge),那么你将被提示下面的错误信息。
  1. $ git branch -d topic
  2. error: The branch 'topic' is not fully merged.
  3. If you are sure you want to delete it, run 'git branch -D topic'.
所以,如果你仍旧要删除这样的分支,你需要使用参数-D
  1. $ git branch -D topic
  2. Deleted branch topic (was 50590b4).
所以请谨慎使用 -D 参数。
至此,我们介绍了git branch的基本概念及常用的命令。如果想更深入的理解分支及分支的管理。可以参看的。

注:
[1] 跟踪分支(Tracking branches)是用来同步本地分支和远程分支的。如果你在’跟踪分支'(Tracking Branches)上执行推送(push)或拉
      取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上。
[2] origin是原始Git仓库地址的别名(alias)。
阅读(3279) | 评论(0) | 转发(0) |
0

上一篇:闲话缓存:算法

下一篇:PHP安全编程法则

给主人留下些什么吧!~~