Git 常用命令 - Branch

概念
Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。
显示所有分支

1
2
3
4
$ git branch 
branch_test
branch_test2
* master

说明: 代表当前工作分支
*创建分支

1
$ git branch <branch name>

注意:运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作。
说明:Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。请注意它和你熟知的许多其他版本控制系统(比如 Subversion 或 CVS)里的 HEAD 概念大不相同。在 Git 中,它是一个指向你正在工作中的本地分支的指针(译注:将 HEAD 想象为当前分支的别名。)。
切换分支

1
$ git checkout <branch name>

此时,HEAD 就指向了指定的分支。
新建并切换到该分支

1
$ git checkout -b <branch name>

这相当于执行下面这两条命令:

1
2
$ git branch <branch name>
$ git checkout <branch name>

查看各个分支最后一次提交对象的信息

1
2
3
4
$ git branch -v
branch_test fd0a4a0 add branch_visible.txt
branch_test2 1376712 add branch2.txt
* master fd0a4a0 add branch_visible.txt

删除分支

1
$ git branch -d <branch name>

列出已经与当前分支合并的分支

1
2
3
$ git branch --merged 
branch_test
* master

说明:一般来说,列表中没有 的分支通常都可以用 git branch -d 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
*列出尚未与当前分支合并的分支

1
2
$ git branch --no-merged 
branch_test2

说明:由于该分支中还包含着尚未被合并进来的其它分支,所以简单地用 git branch -d 删除尚未被合并进来的分支时会提示错误,因为这样做会造成数据丢失:

1
2
3
$ git branch -d branch_test2
error: 分支 'branch_test2' 没有完全合并。
如果您确认要删除它,执行 'git branch -D branch_test2'

不过,如果你确实想要删除该分支上的改动,可以用大写的删除选项 -D 强制执行,就像上面提示信息中给出的那样。
合并分支

1
$ git merge <branch name>

假如希望把分支(branch_test)上的代码合并到主干(master)上,可以按如下步骤进行:

  1. 切换到 master 分区
  2. 执行如下命令进行合并操作:
    1
    2
    3
    4
    5
    6
    $ git merge branch_test
    更新 5773b62..fd0a4a0
    Fast-forward
    branch_visible.txt | 0
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 branch_visible.txt

创建远程分支(将本地分支 push 到远程)

1
$ git push <remote> <local branch name>[:remote branch name]

例如,将本地的 branch_test 分支上传到远程仓库,远程分支的名字仍叫 branch_test:

1
2
3
4
5
6
7
8
9
10
$ git push origin branch_test(相当于 git push origin branch_test:branch_test)
Username for 'url': <your user name>
Password for 'url': <your password>
对象计数中: 3, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 295 bytes | 0 bytes/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To <git url>
* [new branch] branch_test -> branch_test

删除远程分支

1
$ git push <remote> :<branch name>

例如:

1
2
3
4
5
$ git push origin :branch_test3
Username for 'url': <your user name>
Password for 'url': <your password>
To <git url>
- [deleted] branch_test3

更加完整的写法如下:

1
2
3
4
5
$ git push origin :heads/branch_test2
Username for 'url': <your user name>
Password for 'url': <your password>
To <git url>
- [deleted] branch_test2

参考文献:
https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF
http://www.cnblogs.com/springbarley/archive/2012/11/03/2752984.html

坚持原创及高品质技术分享,您的支持将鼓励我继续创作!