1. Git 介绍
Git 是一个开源的分布式版本控制系统,用于快速且高效地处理小中大型项目。
Git 与 SVN 区别:
- Git 是分布式的,SVN 不是。
- Git 是按内容元数据方式存储,SVN 是按文件。
- 分支不同,SVN 分支其实就是另一个版本。
- Git 采用 SHA-1 哈希算法,确保内容完整性。
2. Git 配置
-
下载地址,下载对应平台的最新版本,并进行安装。
-
远端仓库,代码需要上传的服务器账户,此处以 github 举例,注册很简单,不再赘述。
-
配置本地与远端连接:
-
打开 Git Bash.exe 。
-
使用 SSH 生成 RSA 密钥对,用于与远端通信。默认生成路径 (C:\user\xxx.ssh)
ssh-keygen -t rsa -C "xx@xx.com"
-
将生成的公钥添加到服务器上:
-
测试 SSH 通信是否正常:
ssh -T git@github.com
-
添加身份标识
git config --global user.name "xxx"
//名称git config --global user.email "xxx@xx.com"
//邮箱
-
3. Git 常用命令
-
配置相关
git config --global user.name "[name]"
//设置你希望提交时显示的名称git config --global user.email "[email address]"
//设置你希望提交时显示的邮箱git config --global color.ui auto
//使能配色输出 -
创建仓库
git init [project-name]
//创建一个新的名称为project-name
的本地仓库git clone [url]
//从url
处下载一个完整的工程,包含所有的历史记录 -
修改相关
git status
//查看当前仓库的状态,列出所有新加/删除的需要提交的文件列表git diff
//比较尚未暂存的文件与上一次提交之间的差异git diff --staged
//比较暂存区的文件与上一次提交之间的差异git add [file]
//添加文件到暂存区git reset [file]
//将暂存区指定的文件恢复到本地,但保留其内容git commit -m "[descriptive message]"
//将暂存区的文件提交,并对本次提交简要概述 -
分支相关
git branch
//显示当前仓库中的所有分支git branch [branch-name]
//创建一个新的分支git checkout [branch-name]
//切换到指定分支,并更新到新分支的工作目录git merge [branch]
//将指定分支合并到当前分支git branch -d [branch-name]
//删除指定分支 -
文件操作
git rm [file]
//删除工作目录和暂存区的指定文件git rm --cached [file]
//在版本控制中删除指定文件,本地保留git mv [file-origin] [file-renamed]
//更改文件名,并将其添加到暂存区 -
碎片保存
git stash
//暂时保存当前工作目录状态,常用于修复紧急 BUGgit stash pop
//恢复当前工作目录状态,常用于 BUG 修复完成,返回继续开发git stash list
//显示所有暂时保存的列表git stash drop
//丢弃掉最近一次的暂存更改 -
提交记录
git log
//显示当前分支的提交记录列表git log --fllow [file]
//显示文件的历史记录,包括重命名git diff [first-branch] [second-branch]
//显示两个分支内容的差异git reset [commit]
//撤销commit
之后的所有提交,保存本地更改git reset --hard [commit]
//丢弃所有的历史记录,并返回到指定的提交 -
同步相关
git remote add origin [url]
//关联远端仓库git pull --rebase origin master
//获取远端仓库(如果远端仓库不为空, 则必须进行这一步, 否则后面提交会失败)git fetch [bookmark]
//从远端仓库bookmark
下载所有的历史记录git merge [bookmark]/[branch]
//将远端仓库的指定分支合并到本地的当前分支git push [alias] [branch]
//将本地的当前分支提交到远端的指定分支git pull
//从远端下载最新代码并与本地合并
4. Git Flow
Git Flow 开发分支:
-
master 分支:
永远处于即将发布的状态。该分支只能从其它分支合并,不允许在该分支上直接修改。
-
develop 分支:
永远处于最新的开发状态,包含所有要发布到下一个版本的代码,主要用于合并其它分支,如 feature 分支。
-
feature 分支:
该分支主要用于开发新功能,一旦开发完成,需要合并到 develop 分支。
-
release 分支:
准备要发布版本的分支,用于修复 bug,基于 develop 分支,完成后合并到 develop 和 master 分支。
-
hotfix 分支:
修复线上的紧急 bug,等不到 release 版本就必须马上上线,基于 master 分支,完成后合并到 develop 和 master 分支。
5. 工作流程示例
-
初始分支
-
新功能分支
-
发布分支
-
维护分支
6. 示例代码
1. 创建 develop 分支
$ git branch develop
$ git push -u origin develop
2. 新功能开发
$ git checkout -b feature/A
$ git push -u origin feature/A
...
//开发新功能
$ git status
$ git add [file]
$ git commit -m "[discription-message]"
3. 完成新功能,合并到 Develop 分支
$ git pull origin develop
$ git checkout develop
$ git merge --no-ff feature/A
$ git push origin develop
$ git branch -d feature/A
$ git push origin --delete feature/A
4. 准备发布
$ git checkout -b release-0.1.0
$ git checkout master
$ git merge --no-ff release-0.1.0
$ git push
$ git checkout develop
$ git merge --no-ff release-0.1.0
$ git push
$ git branch -d release-0.1.0
$ git push origin --delete release-0.1.0
$ git tag -a v0.1.0 master
$ git push --tags
5. 紧急 Bug 修复
$ git checkout -b hotfix-0.1.1
...
//修改完 Bug
$ git checkout master
$ git merge --no-ff hotfix-0.1.1
$ git push
$ git checkout develop
$ git merge --no-ff hotfix-0.1.1
$ git push
$ git branch -d hotfix-0.1.1
$ git tag -a v0.1.1 master
$ git push --tags