Skip to content

Latest commit

 

History

History
59 lines (51 loc) · 3.46 KB

branch.md

File metadata and controls

59 lines (51 loc) · 3.46 KB

分支 branch

git顶级特性

  • git branch 分支名 创建一个新分支
  • git log --oneline --decorate 查看各个分支/HEAD 所指向的对象,如何涉及到当前分支
  • git checkout 分支名 切换分支, HEAD会指向当前分支
  • git鼓励使用分支/合并,因为分支的创建和销毁的代价非常低

分支使用例子:

  • 遇到新需求,可在master分支上创建新分支
  • 这个新分支可以叫特征分支,独立开发
  • 期间master上出现了紧急bug,需要在master上创建一个新分支
  • 这个新分支可以叫bug分支,独立开发
  • bug分支做完后,经过测试,可合并到master,并删除bug分支
  • 继续开发特征分支,如果bug影响到新需求,此时可以将master合并到特征分支
  • 如果bug不影响新需求,可以在特征分支开发完后,在将master合并进来
  • 特征分支测试完后,合并到master分支,并删除

分支合并冲突:

  • git status 可查看到冲突状态,需要手动将这些冲突解决
  • 手动解决之后,需要使用git add 将冲突文件添加到暂存区,git会将他们标记未冲突已解决
  • git mergetool 来启动一个图形化的解决工具,(本机配置的是vimdiff,具体用法可以后面单独开篇幅讲)

分支管理:

  • 上面已经提到了分支的创建/合并/删除,下面进一步说明分支的进一步用法
  • git branch 结果中的*表示HEAD指针指向的分支
  • git branch -v 查看每个分支最后一次提交信息

基于分支的work flow,会衍生出一些典型的工作模式.

  • 长期分支
    • 鉴于分支合并便捷,多分支的存在很普遍,master分支一般只存完全稳定的代码
    • 实际产品中,可能还有一个发布分支,用于跟踪已发布版本
    • 大型项目可能为了稳定性,还有建议分支和建议更新分支,对应不同的稳定性
    • 当一个项目非常庞大和复杂时,多个长期分支的分发很有帮助(但不是必要的)
  • 特性分支
    • 任何规模的项目都适用
    • 一个短期分支,目标时完成某一特性,或是完成某一需求
    • 特性分支可以快速切换上下文

远程分支:

  • 对远程仓库的引用,包括分支和标签
  • git ls-remote 简写 查看远程引用的完整列表
  • git remote show 简写 获取远程分支的更多信息
  • 要推送到远程分支,前提是在远程仓库上有写入权限,其次要手动推送
  • git push 简写 本地分支名:远程分支名 推送本地分支到远程仓库的指定分支
  • 如果远程仓库有某个分支,本地没有: git fetch 可同步到本地,但不会自动生成可编辑副本, git checkout -b xx origin/xx 可创建一个本地分支
  • 如果本地有某个分支没有设置远端分支为上游分支, git branch -u origin/pro-git 即可
  • 从远程跟踪分支checkout出的本地分支,会自动创建"跟踪分支"(跟踪的分支叫"上游分支")
  • 跟踪分支,是和远程分支有直接关系的本地分支,git pull会自动识别去哪个服务器fetch/merge到哪个分支
  • 最常见的跟踪分支是master
  • git branch -vv 显示本地分支的跟踪情况
  • 推荐使用git fetch + git merge, 因为git pull隐藏了很多信息
  • git push origin --delete 分支名 删除远程分支
    • 如果远程分支已删除,本地分支已删除,还存在fetch的远程分支,使用 git remote prune 简写 来删除不该存在分支

合并不同分支的方式有两种:一种是merge,一种是rebase.

  • rebase被成为变基
  • rebase有风险,单实现的功能和merge类似,指是历史好看一点