第三章 分支
2018-12-30 本文已影响4人
行知路
1.1 概述
- 使用其他版本管理工具较少用到分支,其中的一条原因是分支是重量级的分支,不好创建,但是Git的分支特性确是很简单便捷且对于大型、人数众多的项目来说,几乎是必须使用的特性。
- 由于分支在Git管理与实际开发工作中的重要作用,强烈建议仔细越多原书的本章节
1.2 分支简介
Git在处理分支的时候主要是通过指针的增删改查,所以其速度优势很明显
# 新建testing分支,但保持当前分支不变,实际操作是在当前分支的基础之上新建一个指针,新的指针被命名为testing
$ git branch testing
# --decorate 可以查看当前分支所指的对象
$ git log --oneline --decorate
# 把分支从当前分支切换为testing分支
$ git checkout testing
# 新建且切换分支
$ git checkout -b testing
1.3 分支的新建与合并
# 切换到master分支并把test分支合并入master分支
# 如果遇到冲突,合并会自动终止,解决完冲突后执行git add 、git merge --continue继续合并
# 除了fast forward的情况外,会在master上新建一个节点
$ git checkout master
$ git merge testing
1.3 分支管理
# 查看当前所有分支,当前分支前面会有*号
$ git branch
iss53
* master
testing
# -v 参数可以查看每个分支最后一次提交
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readmes
# 查看哪些分支已合入当前分支,--no-merged查看没有合入当前分支的分支
$ git branch --merged
iss53
* master
# 删除分支
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
1.4 分支开发工作流
每个公司的分支策略会有不同,建议问问度娘,有个基本的了解
1.5 远程分支
# 查看远程分支
$ git ls-remote
# 想远程分支推送
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
# 跟踪远程分支
# git checkout -b [branch] [remotename]/[branch] 创建一个本地分支并跟踪远程某分支
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
# 查看设置的所有跟踪分支
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this
should do it
testing 5ea463a trying something new
# 删除远程分支
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
1.6 变基
- 分支合并策略有merge与rebase(变基)
- 两者的区别是merge产生的log真实反应了实际情况,通过rebase执行之后可以有干净的提交历史
- 如果分支已推送推送到远端且有人使用,不要再执行变基
# 变基的例子,在编辑过程中有冲突发生,先解决冲突,然后git add、git rebase --continue
$ git checkout testing
$ git rebase master
$ git checkout master
$ git merge testing