一、概念
git 命令速查表
1、 git的作用
方便多人协作(同时) 共同开发(编辑代码/文本) 同一项目。
2、git 的前辈:SVN
SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
SVN 作用和 git 一致,这是 SVN很多功能要比 git 弱的多...
举个栗子:SVN 会随着开发人数的变多、开发时间的变长,文件的体积变大的非常快...
而 git 相对好很多...
3、git 仓库
(1)作用:在个人电脑硬盘(用于存储数据)的基础上虚拟出了git 仓库。
若将硬盘上的代码/文本放入git仓库,则可以将 git 仓库推送(push)至 git 远程服务器(github.com/gitee.com),只要将 git 仓库推送至远程的 git 服务器,则团队中其他人则可以将 git 仓库拉取(pull)到本地。以达到多人协作、共同开发同一软件的目的。
4、公钥 - SSH
(1)作用:本地电脑生成公钥,放置于 gitee.com 的SSH公钥中,使得后续本地的 git 仓库推送至远程,不需要输入用户名和密码。
(2)执行流程
git bash here
5、git工作流程图
git工作流程图
- 硬盘(workspace)
- 暂存区(staging)
- 本地git仓库(local repo)
- 远程git仓库(remote repo)
6、暂存区 - staging
暂存区是本地硬盘和本地仓库的中间环节。
只能将暂存区等文件放入本地库。
可以指定本地硬盘哪些文件需要放入本地仓库中。
7、VSCode关于快捷方式和概念
(1)「更改」 -> 「放弃所有更改」:表示将硬盘中与本地仓库不同的文件和代码,全部删除。
(2)「暂存的更改」-> 「取消暂存更改」:表示将暂存的代码重新放回本地硬盘。
(3)「提交」表示git add .+git commit -m '描述信息'
(4)「同步更改」表示git push origin master
(5)「右上角...」里面所有的 git 操作的快捷方式。
(6)「右下角」显示当前所在分支,点击右下角会有本地分支和远程分支。
VScode 插件:GitLens -> 作用:能查看每一行代码写的作者是谁。
8、开源仓库和私有仓库
(1)开源仓库:即将代码在网络上公开;可以被任何人使用、查看。
(2)私有仓库:即只有该仓库的相关成员才有权限查看和编辑。
(3)仓库相关角色
1)管理员:即创建者和可以编辑仓库的成员,都为管理员 - maintainer。
2)创建者 - owner ( gitlab )。
3)开发者 - developer。他的权限比管理员要低,一般是普通的程序员;负责开发具体的功能;而没有完全版的仓库管理权限。
9、PR-pull requests
1、中型项目前端团队的组成:
(1)前端负责人 - leader
职能:负责项目的搭建(git init);技术选型;难点技术攻克;代码审查/code Review。
(2)普通的开发者 - developer
职能:负责具体的功能模块的开发;
普通的开发者功能开发完毕,其代码不能直接推送到主分支,只能推送到自己的分支,所以这就需要我们自行创建分支,然后PR申请合并到主分支~
2、描述
普通程序员功能开发完毕,如何将自己的代码,通过 PR 流程,最终将自己的代码合并到 master 分支上:
(1) developer 在得知自己的开发需求后:要建立自己的开发分支:从主分支上建立自己的分支。
补充:一般的分支类型:
-
-
-
feature/具体的分支名-> 功能分支,即开发某个具体的新功能bugfix/具体的分支名-> 要修复bug的分支
-
-
(2)切换完分支,开发完功能/修复 bug 后;将自己的本地分支推送到远程上。
(3)在 gitee.com 上建立 PR Pull Requests 申请;申请将自己开发完毕的代码,合并到 master 分支上。
申请流程:
-
-
-
- 指定自己的分支合并到 master 上。
- 指定审批代码的领导。(测试的代码review 非常少见)
-
-
(4)领导进行代码review
if 代码review不合格:领导将代码驳回; 程序员重新修改,修改完毕重新提交代码 PR;else 代码review合格:领导将申请的 PR 分支合并进主分支;
则主分支具有了提交 PR 分支中的代码。
3、项目主分支的作用
项目的上线(代码打包发布到 生产环境),一般情况下都是打包的主分支的代码 - master。
10、PR流畅中常见状况
1、远程的分支与本地的分支:commit信息不一致,但代码未发生冲突:
合并的时候会有的问题提示:
解决办法:将远程的commit(合并进本地的)和本地的commit信息,重新再打一个新的 commit 信息。
2、远程的分支与本地的分支:commit信息不一致,且远程代码与本地分支代码发生冲突。
合法的时候会有提示代码发生冲突:
解决办法:需要找到写代码冲突的人,两人一起决定保留什么代码!然后重新再打一个新的 commit 信息。
11、gitignore
项目的根目录下建立 一个文件 .gitignore
作用:但凡在该文件没配置的文件名/文件夹名,则都不会被保存到 git仓库 中。
二、git流程
1、虚拟/初始化出 git 仓库
git init在当前文件夹下初始化了 git 仓库
注:会在当前文件夹下生成一个.git的隐藏文件,该文件即为git仓库。
强调:git 仓库必须在指定文件夹下进行初始化。
2、将硬盘上的代码装入 git 仓库中
(1)git add .
1).表示 all 的通配符
2)作用:将指定文件放入暂存区。->后续执行 commit 可以将暂存区中的文件放入 git 仓库。
(2)git commit -m '自定义描述'语言,用于描述存入git仓库的语言
1)作用:将暂存区文件放入 git 仓库。
注:VSCode中,当文件名变为白色字,则表示该文件硬盘与git仓库保持了同步。
3、打印所有 commit 信息
(包括 commit 作者、创建时间、左右邮箱和哈希值)
1、git log查看信息
2、q英文状态下,退出 -> quit
哈希值:7eed2aa3406faac2253a8b007dca10beca0492ce
哈希值作用:通过哈希值(唯一性)能迅速定位到commit。
4、将本地已有仓库推送至远程服务器
(1)git remote add origin https://gitee.com/${自己的账号}/${远程的仓库名字}.git
(2)git push -u origin "master"
5、git 分支
(1)创建分支
1)git checkout -b 新分支名称
2)作用:基于当前分支创建了一个新的分支。
强调:分支的创建即从当前分支新舰出一个分支,是以当前分支所有的 commit 信息拷贝出一份,作为新的分支commit 链信息。
(2)默认分支
默认分支的分支名 - master,又称为主分支。
(3)切换分支
git checkout 已存在分支名
(4)查看当前所有分支
git branch
(5)合并分支
1)git merge 要合并进来的分支名
注:合并之前必须保持当前分支 git 仓库与硬盘一致。
2)合并会出现的冲突情况
(以master分支合并D分支为例)
3)解决冲突后需要再次输入命令,书写commit 命令表示解决冲突。
(6)将新的分支推送到远程上
切换到新的分支 -> git push origin 新的分支名
6、回滚/回溯
(1)git reset --hand 之前commit的哈希信息
(2)作用:代码回滚/回溯。
强调:尽量不要这么操作。
7、git fetch
假设场景:其他开发者,向远程推送了分支,本地 vscode 快捷方式无法得知远程有哪些分支,则可以通过git fetch 获取得知远程有哪些分支。
三、git实操
1、桌面新建文件夹
2、VSCode打开新建的文件夹,打开VSCode终端
3、初始化仓库
git init
4、将硬盘上的代码装入 git 仓库中
新建文件
(1)编辑保存后的文件状态
(2)输入git add .后的文件状态
(3)输入git commit -m '描述语言'后的文件状态
5、git log查看 commit 信息
6、gitee.com新建仓库
仓库
7、创建分支
git checkout -b 新的分支名
8、将分支推送到远程上去
git push origin 新的分支名
四、PR流程
假设要开发了一个新的功能的必备流程:
1、克隆仓库
git clone 仓库路径
2、同步代码拉取远程master代码
在master分支上,拉取远程最新的 master 代码。(确保本地的master是最新的代码)。
git pull origin master
3、从master分支上创建一个新的功能分支
git checkout -b 分支名
在当前分支下进行代码编译...
git add .||指定文件名+git commit -m '自定义描述'
将workspace文件放到staging上;
将staging文件放到local repo
4、新的分支开发完毕
git pull origin master
当前分支执行此命令,同步远程master最新代码(以防远程提交PR造成代码冲突,若有冲突,则在本地解决冲突)
4、将本地分支推送至远程上
git push origin 分支名
5、进行 PR 提交
本文正在参加「金石计划」