Git源代码管理
一、 分支管理
使用 git 进行源代码管理,一般将某个项目的所有分支分为以下几条主线
1. Master
顾名思义,既然名字叫 Master ,那么该分支就是主分支的意思。 master 分支永远是production-ready 的状态,即稳定可产品化发布的状态。
2. Develop
这个分支就是我们平常开发的一个主要分支了,不管是要做新的 feature 还是需要做bug fix ,都是从这个分支分出来做。在这个分支下主要负责记录开发状态下相对稳
定的版本,即完成了某个 feature 或者修复了某个 bug 后的开发稳定版本。
3. Feature branches
这是由许多分别负责不同feature 开发的分支组成的一个分支系列。 new feature 主要就在这个分支系列下进行开发。当功能点开发测试完毕之后,就会合并到 develop
分支去。
4. release branches
这个分支系列从 develop 分支出来,也就是预发分支。在预发状态下,我们往往会进行预发环境下的测试,如果出现缺陷,那么就在该 release 分支下进行修复,修复完毕测试通过后,即分别并入master 分支后 develop 分支,随后 master 分支做正常发布。
5. Hotfix branches
这个分支系列也就是我们常说的紧急线上修复,当线上出现bug 且特别紧急的时候,就可以从 master 拉出分支到这里进行修复,修复完成后分别并入master 和 develop
分支。
二、 工作原理
Git 的工作方式:
也就是说, 每次提交版本变动的时候, git 会保存一个快照(snapshot)。如果文件没有被更改,git 也不会再次保存,而是提供一个到原来文件的链接。这样一来, git 更像是一个小型的文
件系统。此外, git 的所有操作都可以是本地的,仅仅在将新版本的内容上传到服务器上时才需要连接网络。
Git 目录 (repository )是 Git 保存元数据和对象数据库的地方。这也是 Git 最重要的部分。
工作目录 (working directory )是项目某个版本的内容。
暂存区 (staging area)是一个简单的文件,通常包含在 Git 目录中。其中存储了将要进入下一次提交的信息。
Git 的基本工作流程如下:
修改 Git add 暂存 Git commit 提交
1.在工作目录中修改文件。
2.标识(stage)文件,并将文件快照添加到暂存区。
3.执行 commit ,将获取暂存区中的文件,并将快照永久保存到 Git 目录中。
三、 常用命令
- 创建工程
git init
- 提交修改
git add 后就从修改变为暂存
git commit 后就从暂存变为提交。
- 提交规范
在commit时,如果有对应PR(需求项),请在第一行写上 PR 号,然后再描述信息(另起行),并把涉及到改动的文件名附上。
1. 回溯
改错了,不过还没有git add
git reset --hard
改错了,已经git add
git reset -q [files]
(其实就是git add 的反向操作 )
改错了,已经git commit
git reset --soft HEAD^
(其实就是git commit 的反向操作 )
已经git commit ,忘记写注释(PR)或者漏提交了部分文件
如果添加注释可以直接执行命令 git commit --amend ,填写注释保存,如果添加文件先执行 git add 后执行 git commit --amend
2. 创建分支
查看分支
git branch
切换分支
git checkout [branch name]
创建分支(在当前代码的基础上)
git branch [branch name]
- 合并分支
先检出目标分支再把其他分支合并进去
git checkout [branch name]
git merge [other_branch]
3. 删除分支
git branch -d [branch name]
(不能删?用这个! )
git branch -D [branch name]
4. 标签管理
git tag v1.0
5. 远程操作
克隆远程库
git clone
定义远程库
git remote
从远程库取回更新
git fetch
从远程库取回更新并合并
git pull
推送至远程库
git push
四、 操作流程 (本地 )
1. 准备工作
初始化目录
git init
git add readme.md
git commit -m 'master init'
然后从 master 分支中拉出 develop 分支
git checkout -b develop
2. 功能点开发
有新的需求或功能点需要开发时,从最新 develop 分支中拉出一个 feature 分支
git checkout -b [feature name]
完成 feature 开发后需要对 feature 分支进行合并操作
git checkout develop
git merge [feature name]
- 处理冲突
当合并分支出现冲突时,需要手动将文件冲突的部分进行修改。对修改后的文件保存
并重新提交。 - 产品发布
当 develop 分支已经达到了一个可以发布的状态,将最新的 develop 分支拉出来成
为一个 release 分支
git checkout -b release
假设需要一些环境配置,新建配置文件并提交
git add release.config
git commit -m 'release1'
当遇到一些预发环境下的 bug ,这个时候我就直接在 release 分支下进行修复演进,
如果 bug 问题很大, 则需要重新并入develop 中,拉出新的 feature 进行开发重构。
如果预发一切正常,需要将 release 分支同时并入master 分支和 develop 分支,
master 分支供线上发布, develop 分支供下次开发演进。
git checkout master
git merge [release name]
git checkout develop
git merge [release name]
- 线上 bug 热修复
当碰到一些线上意想不到的 bug ,需要紧急修复时,就直接从 master 分支拉出
hotfixes 分支进行修复。
git checkout master
git checkout -b [hotfix name]
bug 修复完毕,测试通过后我们将分支合并到 master 和 develop 中去。
git checkout develop
git merge [hotfix name]
git checkout master
git merge [hotfix name]
五、 远程操作
远程操作的 5 个常用命令
git clone
git remote
git fetch
git pull
git push
- 从远程主机克隆一个版本库
git clone < 版本库的网址>
该命令会在本地主机生成一个目录,与远程主机的版本库同名。
- 管理主机名
为了便于管理, Git 要求每个远程主机都必须指定一个主机名。
不带选项的时候, git remote 命令列出所有远程主机。
- 将更新取回本地
git fetch < 远 程主机名 >
默认情况下, git fetch 取回所有分支( branch )的更新。如果只想取回特定分支的
更新,可以指定分支名。
git fetch < 远 程主机名 > < 分支名 >
git branch 命令的 -r 选项,可以用来查看远程分支, -a 选项查看所有分支。
取回远程主机的更新以后,可以在它的基础上,使用 git checkout 命令创建一个新的分支。
git checkout -b newBrach origin/master
也可以使用 git merge 命令或者 git rebase 命令,在本地分支上合并远程分支。
git merge origin/master
或者
git rebase origin/master
- 取回更新同时合并到本地
git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull < 远 程主机名 > < 远 程分支名 >:< 本地分支名 >
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next
上面命令表示, 取回 origin/next 分支, 再与当前分支合并。 实质上, 这等同于先做 git fetch ,再做 git merge。
git fetch origin
git merge origin/next