一、前提
1、当我们使用git命令时,有的常会用到一些vi/vim操作。 常用的如下:
命令 | 说明 |
---|---|
ESC | 退出输入模式,切换到命令模式 |
i、a、o 大小写 | 切换到输入模式 |
:q | 退出程序 |
:w | 保存文件 |
:wq | 保存并退出 |
:wq! | 强制保存后离开 |
Eg:我们输入一个交互式命令如下
2、Git参数,常用参数说明如下:
git参数 | 说明 |
---|---|
-d | --delete:删除 |
-D | --delete --force的快捷键 强制删除 |
-f | --force:强制 |
-m | --move:移动或重命名 |
-M | --move --force的快捷键 |
-r | --remote:远程 |
-a | --all:所有 |
二、git 简介
git :是一个版本控制系统(管理我们修改的多次提交) ,同时也是分布式的(非集中式,其在我们每个人的电脑有一个本地仓库)
原理:对于我们项目代码管理,我们将每次提交(commit后)存在自己的本地仓库,而后通过推送(push后)备份在远程仓库(用到gitlab或github等)。
重要性:使用git 更好的存储并管理我们的代码,同时方便和团队协作开发。
三、git 命令操作
1、提交代码
git add -all //从工作区到暂存区 git commit -m ‘描述’ // 从暂存区到本地仓库 git push origin 分支名 // 从本地仓库到远程仓库 |
---|
注意点
git push 每次推送使用git push 后面不写参数,前提是本地分支与远程分支有追踪关系(tracked),如果没有 ,用 git push --set-upstream origin 分支名 建立追踪关系。
2、工作区
工作区修改了恢复,可通过git status 查看
git restore <file> |
---|
3 、暂存区
工作区修改了提交到暂存区想恢复,可通过git status 查看
git restore --staged <file> |
---|
4、本地仓库
a.回退版本(回退到前几次提交的任意一次commit)
git log //查看当前分支所有commitid ,并获取要回退的那个commitid git reset —hard commitid // 用到参数—hard |
---|
b.前进版本
git reflog // 获取的commitid 包括 回退版本前的,获取回退前的commitid 命令: git reset —hard commitid |
---|
5、对比差异
查看工作区和暂存区差异: git diff 查看工作区和仓库的差异:git diff HEAD 查看暂存区和仓库差异:git diff —cached 查看两个分支的差异 后面分支f2比前面分支f1 多了或少了什么:git diff f1 f2 |
---|
6、分支操作
创建并切换分支 :git switch -c 分支名 切换分支: git switch 分支名 查看分支: git branch 查看远程分支: git branch -r 查看所有分支: git branch -a 删除本地分支 :git branch -d 分支名 比如 git branch -d dev 强制删除本地分支: git branch -D 分支名 删除远程分支: git push 远程仓库名 :分支名 比如 git push origin :dev 本地分支重命名:git branch -m oldName newName 将重命名后的分支推送到远程 :git push origin newName 删除远程的旧分支 :git push -d origin oldName |
---|
备注:
- 不能在当前分支删除要删除的分支,所在当前分支如果要删除另一个分支,会去比对这两个分支的差异,如果要删除的分之代码多余当前分支,-d删除不了 要求merge或-D,如果确定要删除,用-D。
2. git fetch -p 说明:
-p
的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。
7、标签操作
打tag是线上环境构建分支的一个快照
查看标签 git tag 创建标签 git tag -a 标签名 -m '描述' 删除本地标签 git tag -d 标签名 强制删除本地标签 git tag -D 标签名 删除远程标签 git push 远程仓库名 :标签名 |
---|
备注:
远程分支、远程tag、远程分支名要删除,都用的push
8、stash暂存
一般用于停止手头工作 去做另一个紧急任务,比如解决线上bug。但当前分支不需要commit。则用stash暂存。解决了线上问题回来这个分支,需要弹出stash的代码
暂存:git stash -a // 其中-a代表所有(追踪的&未追踪的)因为git status不带参数 没有add过的(未追踪的)不会被stash 查看暂存列表$stash{n}: git stash list 弹出 ,从stash list移除: git stash pop 取出,未从stash list里面真正移除: git stash apply 暂存号 从stash list移除 :git stash drop 暂存号 // 配合git stash apply 暂存号 |
---|
备注:
如果不stash是否可以切换分支成功?
可以切换:说明两个分支commit提交的一样,修改一个分支上的,去切换,可以成功。
不可以切换:说明两个分支commit提交的不一样(有差异),修改一个分支上的,去切换,报错 Your local changes to the following files would be overwritten by checkout。。。
Please commit your changes or stash them before you switch branches.所以不想commit的情况下,需要stash 。
9、git pull
拉取远程分支 f2 并与当前分支f1 合并: git pull origin f2 拉取当前分支的远程分支 f1 并与当前分支f1 合并:git pull origin f1 查看本地分支与远程分支是否建立追踪关系: git branch -vv |
---|
备注:
git pull 拉取当前分支的远程分支 f1 并当前分支f1 合并 ,不带参数前提是与远程分支f1建立追踪关系(upstream)
10、合并分支
在当前分支和并f2分支方法1:
git pull origin f2 |
---|
在当前分支和并f2分支方法2:
git switch f2 git pull origin f2 git switch f1 git merge f2 |
---|
备注:
如果有冲突:在当前分支(自己分支)解决冲突后需要git add & commit
11、 删除文件操作
删除了工作区: rm 文件名 // 等同于手动delate 删除工作区文件,并且将这次删除放入暂存区: git rm test.txt //前提工作区干净,如果工作区不干净有修改,执行会失败,可以执行下一个名令 删除工作区和暂存区文件,并且将这次删除放入暂存区:git rm -f test.txt //即工作区修改了或者进入暂存区了用这个命令。 |
---|
备注:
所以为了方便,只要真的想删除那个文件,执行完以上三个命令,统一 git add & commit 就行。
12、常用场景:合并多个commit
在我们代码要合入master时,要上线时需要将多个commit合并
a、方式一:使用reset
git checkout master & git pull origin master & git checkout feature1 & git merge master git reset master // commit重置到master的最新的commit,但保留工作目录。 git add --all git commit -m "合并message" git push -f origin feature1 // 用-f 因为reset后,个人的本地仓库分支提交落后于个人的远程分支 git push 会被拒绝 |
---|
备注:
reset --hard commitid // 回退版本 (相当于工作区和暂存区和本地仓库都变成以前的一个版本)
reset --soft commitid // 保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区
reset —mixed commitid // 保留工作目录,并清空暂存区 相当于:reset 不加参数
其中commitid 如果是分支名 相当于重置到这个分支的最新的一次commitid。
b、方式二: 使用rebase
首先 在开发分支合入最新的master git log 看看要基于那个commit合并 然后在开发分支使用rebase 的交互式操作 。git rebase -i 【commitid】 ;
再次查看git log。 |
---|
备注:
在远程合入master后 本地git log之前 需要git pull。然后git log。
四、git开发流程
掌握了git的基本命令和jenkins部署,在实际开发中的应用流程如下:
1、环境和分支说明
开发:个人分支feature/xxx 构建分支dev ,构建环境dev
测试:构建分支test,构建环境test
预发布:构建分支release,构建环境teta
发布: 构建tag,构建环境prop
热更新:线上bug修复,分支hotfix/issue-问题描述
标签:用时间加版本tag 比如 202011220930-qiannniaov1.0.1
2、具体操作流程
1. clone新的项目 2.切到master 分支,git pull origin master 拉最新的线上代码 3.切一个新分支开发功能,比如开发一个定单列表功能 git switch -c feature/order-list 4.开发中ing 5.开发完成 6.联调 切到dev分支合代码 git switch dev git merge feature/order-list 7.dev环境(jenkins上的dev任务)构建dev分支 8.联调过程可能需要修改代码,切回feature/order-list 分支 改好后,继续上面的6,7步骤 9.联调通过后,准备提测 10.切到master分支 拉最新代码 git pull 11.以master分支新建test分支 12.切到test分支合代码 git switch test git merge feature/order-list 13.test环境构建test分支 14.有问题就切回feature/order-list 改好后合到test分支,注意这里最好也合到dev分支,避免下次开发时可能遇到test正常,dev环境有问题。 15.testOK 16.切到master分支 拉最新代码 git pull 17.以master分支新建release分支 18.然后再合feature/order-list分支 19.beta环境验证OK 20.release分支提pr 21:master分支打tag 22.prop环境验证是否OK 23.如果需要修改代码 24.切到master分支,新建一个hotfix分支git switch -b hotfix/issue-typeerror 25.改好bug,到test合hotfix/list-order testOK 26.hotfix/issue-typeerror 分支提pr 27.切到master 打tag ,prop环境构建tag 28.如果哪些分支不需要就删除掉 |
---|
五、vscode上的git操作
如果熟悉了手动命令的原理,可以试试vscode上的图形化界面操作
1、vscode上提交git
a.vscode左下角
b.文件操作说明
c.vscode左上角说明
d.查找所以命令
所以用vscode图形化界面进行一系列git操作了。
2、相关git插件&使用(推荐 git history)
git history插件查看commit历史,界面如下:
六、git 常用简写命令
1、如果git命令原理熟悉了,也可以用简写的
gaa='git add --all' gcmsg='git commit -m' gb='git branch' gco='git checkout' gcb='git checkout -b' gd='git diff' gl='git pull' gm='git merge' gp='git push' |
---|
2、 查看自己电脑上的git命令简写
3、 简写出错或忘记
使用which 命令或 where 命令 查看即可。比如
参考文献:
git基础:https://www.liaoxuefeng.com/wiki/896043488029600
git官网:https://git-scm.com/book/zh/v2
git总结先到此!之后会更新