重学Git:分支完全使用手册

  • 原创
  • 作者:程序员三丰
  • 发布时间:2022-09-29 13:19
  • 浏览量:807

分支的概念及特点

什么是分支

分支不是Git独有的特性,常用的版本控制系统都有分支管理。此处基于Git分支来讲:

  • 经过多次修改工作区的内容,且多次提交git commit之后,Git 会把它们串成一条时间线,这条时间线就是称为一个分支。
  • 在Git中,一开始就默认有一个分支,即master分支,也叫主分支。
  • 随着开发推进,可能会有更多分支,这个要根据实际情况而定。

HEAD

HEAD的概念比较抽象,暂不做详细说明,此处只做两点关键性说明:

  • 可以把HEAD看做是一个**指针**
  • HEAD指向当前分支。

Git分支的特点

  • Git创建、切换、删除分支的速度特别快(秒级的),正常情况下1秒内就能完成。

    除了Git,还有其他版本控制系统(如SVN),版本控制系统都有分支管理,但是他们创建和切换分支的速度特别慢,耗时长。

  • 多个分支之间代码独立,互不影响。

  • 分支可灵活合并。

创建分支

通过git branch {分支名称}创建分支

# 创建dev分支
git branch dev

创建并切换到新创建的分支

  • git checkout -b {分支名称}

    # 创建dev分支,并切换到dev分支
    git checkout -b dev
    
  • git switch -c {分支名称}

    # 创建dev分支,并切换到dev分支
    git switch -c dev
    

查看分支

git branch命令会列出本地版本库中的所有分支。其中前面标*号表示是当前分支。

# 查看本地分支
git branch

# 查看本地和远程的所有分支
git branch -a # 分支前带有remotes/的是远程分支,否则是本地分支

切换分支

通过git checkout切换分支。

# 切换到dev分支
git checkout dev

# 通过git branch查看分支,此时dev分支前应该标有*号
git branch

通过git switch {分支名称}切换分支。

# 切换到dev分支
git switch dev

# 通过git branch查看分支,此时dev分支前应该标有*号
git branch

合并分支

正常的分支合并

通过git merge {分支名称}合并分支,是将merge后面的分支合并到当前分支。

# 查看确认当前分支为master
git branch # master分支前应该标有*号

# 将dev分支合并到当前分支(master分支)
git merge dev

分支合并成功后,merge后面的分支的修改会被增加到当前分支。

解决冲突

如果遇到冲突,手动解决冲突。推荐使用vscode可以更高效的解决冲突。

经验之谈,冲突其实并不可怕,我们需要耐心的阅读代码,把有用的代码留下,然后 git add,然后git commit就可以了。只是有时候冲突代码量比较大的时候,更需要我们的耐心。

查看分支合并情况

# 查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit

删除分支

通过git branch -d {分支名称}删除分支。

# 删除dev分支
git branch -d dev

# 强制删除feature分支(一个没有被合并过的分支)
git branch -D dev

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

  • master分支应该是非常稳定的,仅用来发布新版本,平时不在上面工作;
  • dev分支,顾名思义,平时开发过程中我们都在dev上工作,阶段性的合并到master分支即可。
  • 建议每个人都有自己的分支,根据实际情况合并到dev分支上。

Bug分支

Feature分支

多人协作

储藏stash

变基Rebase

其他常用命令介绍

git cherry-pick {commit id}

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/39.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas