Git使用教程
|Word count:4k|Reading time:14min
学习Git的使用。
项目
项目开发流程
产生:
1.明确需求和业务场景(用例图和如何使用)
2.设计代码框架(代码结构和数据流向)
3.分析设计细节业务的实现
4.设计类,设计流程图,序列图,状态图
5.评估设计和后续设计修改
维护:
1.建立开发分支,开发完成
2.提交测试
3.生成changelog
4.测试通过,release提交changelog,打tag,合并到dev或者master上,删除临时分支
项目开发结构工程
tree1 2 3 4 5 6 7 8 9 10 11 12 13
| .vscode |--- settings.json // vscode 配置 |--- templates |--- cpp.lict // license文件 |--- h.lict // license文件 .gitignore // git push 忽略push时的文件和目录 README.md // 工程的描述 include // 工程头文件 src // 工程的源文件 docs // 工程的文档文件 CHANGELOG.md // 工程的的变化日志 node_modules // nodejs生成变化日志的插件
|
Git教程
熟悉Git的基本的使用可通过Git的教程游戏学习。
Git原理
了解Git的原理和不同的模式
git模型

git状态

git工作原理

Git基础
Git配置用户
安装Git之后,要做的第一件事就是设置自己的用户名和邮件地址。通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作。
1 2 3 4 5
| git config --global user.name "your_name" git config --global user.email "your_email"
|
检查配置信息
1 2 3 4 5
| git config --list --global
git config user.name git config user.email
|
获取帮助信息
1 2 3 4
| git help config
git config -h
|
Git操作
操作之前要知道, git中文件的状态未跟踪? 未修改U 已修改M 已暂存A

创建仓库
有一个尚未进行版本控制的项目目录,想要用Git来控制它
.gitignore配置文件书写方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
*.a
!lib.a
/file
doc/
doc/*.txt
doc/**/*.pdf
|
操作命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| git status -s
git add file
git add .
git commit -m "更新信息"
git checkout .
git checkout --filename
git reset --hard CommitId
git reset HEAD
git reset HEAD --filename
git rm -f filename
git rm --cached filename
git log --pretty=oneline
git -log -n --pretty=oneline
git -log -n --pretty=format:"%h | %an | %ar | %s"
|
Git的HEAD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
git checkout CommitId
git checkout HEAD^
git checkout HEAD~3
git checkout 分支^
git checkout 分支~3
git branch -f 分支 HEAD
git checkout 撤销分支 git revert HEAD
|
Git提交树
1 2 3 4 5 6
| git checkout 某个分支 git cherry-pick CommitId CommitID ...
git checkout 某个分支 git rebase -i HEAD~3
|
Github操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| git clone 远程仓库地址
git branch
git brach 分支名称
git checkout login
git checkout -b 分支名称
git checkout 主分支
git merge 目标分支
git checkout 目标支上
git rebase 主分支 git rebase 目标分支 主分支
git branch -d 分支
git push -u 远程仓库名字 本地分支名称:远程分支名称 git push -u origin main:main git push -u origin main
git push origin 远程仓库名字
git remote show 远程仓库名称
git checkout 远程分支名称 git checkout dev
git checkout -b 本地分支名字 远程仓库名字/远程分支名 git checkout -b ldev origin/dev
git branch -u 远程仓库名字/远程仓库名 本地仓库名字
git pull 远程仓库名字 远程分支名称:本地分支名称
git pull origin dev git pull
git push 远程分支 --delete 远程分支 git push origin --delete dev
git fetch git fetch 远程仓库名字 远程分支名称:本地分支名称
|
第一次Push Master分支
cmd1 2 3 4 5 6 7 8 9 10
| # 设置git git config --global user.name "your_name" git config --global user.email "your_email" # 推送仓库 git init # 本地初始化Git git add -A # 提交改动 git commit -m "init blog" # 提交信息 # git remote rm origin https:// #username 你的gitlab库名字 git remote add origin https:// # 链接远程的gitlab的master git push -u origin main # 以master的角色推送到远程仓库
|
Git常用的命令
教程参考,多上Google查阅。
git add命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。
git clone命令将存储库克隆到新目录中。
git status命令用于显示工作目录和暂存区的状态。
git diff命令用于显示提交和工作树等之间的更改。
git commit命令用于将更改记录(提交)到存储库。
git reset命令用于将当前HEAD复位到指定状态。
git rm命令用于从工作区和索引中删除文件。
git mv命令用于移动或重命名文件,目录或符号链接。
git branch命令用于列出,创建或删除分支。
git checkout命令用于切换分支或恢复工作树文件。
git merge命令用于将两个或两个以上的开发历史加入(合并)一起。
git log命令用于显示提交日志信息。
git stash命令用于将更改储藏在脏工作目录中。
git fetch命令用于从另一个存储库下载对象和引用。
git pull命令用于从另一个存储库或本地分支获取并集成(整合)。
git push命令用于将本地分支的更新,推送到远程主机。
git remote命令管理一组跟踪的存储库。
git show命令用于显示各种类型的对象。
git rebase命令在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支。
Git合并分支请求
cmd1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 1.创建新分支编辑代码 git checkout -b your_branch_name 2.在自己分支下git status 获取本次修改文件列表 3.添加Commit git add -A git commit -m " xxxxx " 4.切换到合并的主分支上pull最新代码(dev是主合并分支) git branch显示所有分支(当前在本地新创建your_branch_name分支)
git checkout dev 切换到dev分支上 git pull 拉取服务器上dev的最新代码 git checkout your_branch_name 切换到自己修改的分支上 git merge dev 合并分支到dev上
5.推送本地分支到服务器 git push origin your_branch_name:your_branch_name
|
Gitlab上Merage请求
1.选择merge请求




Git仓库的分支和Commit开发规范
Git仓库分支管理
分支命名
固定 分支
master 分支
- master 为主分支,也是用于部署生产环境的分支,确保master分支稳定性
- master 分支一般由develop以及hotfix或fixbug分支合并,任何时间都不能直接修改代码
develop 分支
- develop 为开发分支,始终保持最新完成以及bug修复后的代码
- 一般开发的新功能时,feature分支都是基于develop分支下创建的
临时 分支
feature 分支
- 开发新功能时,以develop为基础创建feature分支
- 分支命名: feature/ 开头的为特性分支, 命名规则: feature/user_module、 feature/cart_module
release分支
- release 为预上线分支,发布提测阶段,会release分支代码为基准提测
当有一组feature开发完成,首先会合并到develop分支,进入提测时,会创建release分支。
如果测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交。
当测试完成之后,合并release分支到master和develop分支,此时master为最新代码,用作上线。
fixbug 分支
分支命名: fixbug/ 开头的为修复分支,它的命名规则与 feature 分支类似
非紧急的bug时,计划性修复,以master或develop分支为基线,创建fixbug分支,修复完成后,需要合并到master分支和develop分支
修补bug
hotfix 分支
分支命名: hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似
线上出现紧急问题时,需要及时修复,以master或develop发布的分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支
分支任务
feature 分支
cmd1 2 3 4
| git checkout -b feature/xxx # 从dev建立特性分支 git add -A git commit -m 'commit comment' git merge feature/xxx --no-ff # 把特性分支合并到dev (--no-ff保留合并信息)
|
hotfix 分支
cmd1 2 3 4 5
| git checkout -b hotfix/xxx # 从master建立hotfix分支 git add -A git commit -m 'commit comment' git merge hotfix/xxx --no-ff # 把hotfix分支合并到master,并上线到生产环境 (--no-ff保留合并信息) git merge hotfix/xxx --no-ff # 把hotfix分支合并到dev,同步代码 (--no-ff保留合并信息)
|
release 分支
cmd1
| git merge dev --no-ff # 把dev分支合并到release,然后在测试环境拉取并测试 (--no-ff保留合并信息)
|
master 分支
cmd1 2
| git merge release --no-ff # 把release测试好的代码合并到master (--no-ff保留合并信息) git tag -a v0.1 -m '部署包版本名' #给版本命名,打Tag
|
Git Commit规范
Commit messages的基本语法,参考比较广泛的格式Angular Git Commit Guidelines,参考文档1,参考文档2。
具体格式为:
<type>(scope): <subject>
<BLANK LINE>
body
<BLANK LINE>
footer
参数说明
type: commit的类型
scope: commit修改的文件范围
subject: 简明commit的内容,留空首字母不要大写,动词开头,结尾不需要.,不超过50个字符
body: commit详细描述,需换行,则使用 |,每一行不超过72个字符
footer: 其他与代码无关描述
Type的类别说明:
| 值 |
描述 |
| feat(feature) |
新增一个功能 |
| fix |
修复一个Bug |
| docs |
文档变更 |
| style |
代码格式(不影响功能,例如空格、分号等格式修正) |
| refactor |
代码重构 |
| perf(perfect) |
改善性能 |
| test |
测试 |
| build |
变更项目构建或外部依赖 |
| ci |
更改持续集成软件的配置文件和package中的scripts命令 |
| chore |
变更构建流程或辅助工具 |
| revert |
代码回退 |
Git commit 提交例子
git1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| git add -A # 添加修改文件
# git commit 例子
git commit -m " feat(client/*): add the unblock client connect server mode
Add the unblock client to connect server - The block client will time out - Use the select listen the client successful status
BREAKING CHANGE: not need wait to socket connect - unblock connect - timeout retry connect
fix #123 "
git push
|
Nodejs的Changelog
官方网站下载,选择对应的版本,解压
cmd1 2 3 4 5 6 7 8 9 10 11
| vim ~/.bashrc
在# Alias definitions下添加 export NODE_HOME=/opt/nodejs/node-v11.1.0-linux-x64/bin export PATH=$NODE_HOME:$PATH
source ~/.bashrc
node -v npm -v
|
更换淘宝镜像
1
| npm install -g cnpm --registry=https://registry.npm.taobao.org
|
1 2
| npm install -g commitizen
|
1 2 3 4
| npm install -g conventional-changelog npm install -g conventional-changelog-cli
|
检查
成功安装
1 2 3 4 5
| /home/dev/workspace/nodejs/node-v12.18.2-linux-x64/lib ├── commitizen@4.1.2 ├── conventional-changelog@3.1.21 ├── conventional-changelog-cli@2.0.34 └── npm@6.14.5
|
nodejs初始化
支持Angular的Commit message格式
1
| commitizen init cz-conventional-changelog --force --save --save-exact
|
生成Changelog
生成Changelog记得打开package.json修改version
1 2 3 4 5 6 7 8 9
| conventional-changelog -p angular -i CHANGELOG.md -s
conventional-changelog -p angular -i CHANGELOG.md -w -r 0
"scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" } 执行npm run changelog
|
定制commit message格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| npm install cz-customizable --save-dev
cp node_modules/cz-customizable/cz-config-EXAMPLE.js .cz-config.js
// scopes: [{ name: 'accounts' }, { name: 'admin' }, { name: 'exampleScope' }, { name: 'changeMe' }],
// allowTicketNumber: false, // isTicketNumberRequired: false, // ticketNumberPrefix: 'TICKET-', // ticketNumberRegExp: '\\d{1,5}',
// skipQuestions: ['body'],
"config": { "commitizen": { "path": "node_modules/cz-customizable" } }
|
Note:
提交git commit 时使用git cz
添加步骤:
1.git add -A // 将改变添加入缓存
2.git cz // 添加文件修改commit
3.conventional-changelog -p angular -i CHANGELOG.md -s -p // 生成本次的Changelog
4.git add -A // 添加Changelog的改变
5.git cz // 添加Changelog的改变
6.git push // 进行push