开始准备
1. 首先需要前往git官方网站安装git环境: Git (git-scm.com)
然后我们需要去创建一个仓库,一般国内仓库是码云(速度快但资源少),国外仓库是github(速度慢,但资源多,有时都进不去,最好是有梯子)
2. 紧接着自行创建一个项目
3. 通过shift+鼠标右键点击项目文件夹中空白区域,然后打开powershell控制台,输入git init来初始化一个.git文件夹
只要我们的项目文件目录中有一个.git的隐藏文件夹,那么就代表我们的项目文件已经被git所管理,可以通过git命令来控制项目文件
配置身份及公钥
如果我们是第一次使用电脑进行git,那么需要配置一下自己电脑中git的身份及SSH密钥
可以通过git config --list检查配置信息,查看一下user.name和user.email是否配置
如果没有配置,那么需要配置全局账号与邮箱,同样是在powershell中:
1. 配置user name 与email
git config --global user.name "名字"
git config --global user.email "邮箱"
注意:名字和邮箱只是一个别名,没有什么要求
2. 生成SSH密钥
在终端执行ssh-keygen -t rsa -C "邮箱"命令,就会在C盘中本机用户的根目录下生成一个ssh文件夹
,进去打开id_rsa.pub,复制里面的内容
3. 然后去自己的远程仓库中配置ssh密钥
4. 删除凭证
同时需要注意,如果这台电脑之前有人使用过了gitee或github,那么电脑会自动生成一个对应网站的windows凭证,上面记录着他的远程仓库的账号密码,如果你想要使用自己的gitee或github,则需要前往凭据管理器中删除该凭证
如果不删除该凭证的话,那么请求会被拒绝并返回403
win10直接搜索凭据管理器打开即可
建立远程仓库与本地仓库的连接
既然我们要上传文件到远程仓库中,那么必须建立本地仓库和远程仓库的连接
首先可以使用git remote -v查看远程仓库的信息,如果提示错误则证明还未建立连接
而建立连接的方式有两种:
第一种,git clone url,这种方式可以把远程仓库中的项目文件直接克隆到本地,并且.git文件夹中已经建立好连接了(一般是你去到新公司,负责人会把项目所在远程仓库的地址给你,直接使用该命令即可)
url是远程仓库的地址
第二种,git remote add origin url
origin是远端仓库的默认别名,你也可以通过git remote rename 旧名字 新名字来命名
远程仓库的地址一般就是这里面的链接:
git的工作流程
接下来我们将来介绍一下git的主要工作流程
Workspace工作区
就是平时进行开发改动代码的地方,即项目文件所在的文件夹,我们一般都是使用IDE打开文件夹编写代码
你可以使用git restore撤销工作区中对文件的修改,或者使用git restore .撤销工作区中对所有文件的修改
比如:当你修改了README.md文件之后,使用git restore ../README.md命令便撤销了修改,或者也可以通过git restore *.md撤销所有md文件的修改
../是README.md相对于.git文件夹的路径,可以通过git status查看被修改文件的路径stage
注意这种操作很危险,是直接撤销了对文件的所有修改
Index暂存区
暂存区中标记了当前工作区中哪些内容是被 Git 管理的
当你在工作区中修改了某文件,使用git add <文件名>可以将文件添加到暂存区,或者使用git add .将所有修改过的文件添加到暂存区
如果想要撤销git add操作,可以通过git restore --staged A放弃某次add操作,或者使用git reset HEAD放弃暂存区中所有的add操作
注意先使用git status来查看被修改文件的路径
git status查看状态
通常我们需要查看一个文件的状态:git status
Changes not staged for commit:表示文件在工作区中被修改了,但是还未添加到暂存区Changes to be committed:文件放在暂存区了,等待被提交到本地仓库nothing to commit, working tree clean:暂存区中已经没有内容了
Repository本地仓库
位于自己的电脑上,通过 git commit -m "第一次提交" 提交暂存区的内容进入本地仓库,git commit要求必须要有提交的留言,所以后面得跟上-m "留言"
checkout检出本地仓库代码
本地仓库保存有我们提交(commit)过后的文件
这就代表如果我们工作区中的代码不小心被删了,或者是我们不小心使用git restore .撤销了所有的修改,那么我们就能够通过git checkout -- "文件名"来恢复
例如:git checkout -- *.vue,检出所有的vue文件并覆盖本地对应的vue文件
注意,如果想要检出代码恢复,那么要求是已经commit过了,如果没有提交过,那么本地仓库中也不会有对应的代码文件
而且最重要的一点,checkout检出文件会覆盖我们工作区的文件,所以除非是你想还原,否则轻易不要使用checkout
Remote:远程仓库
用来托管代码的服务器,本地仓库修改完代码后通过 git push 命令同步代码到远程仓库,但是在git push之前
更改别名
远程仓库都有一个默认的别名origin,我们可以通过git remote rename 旧名字 新名字来更改别名,
公司内部有不同的团队A和B在同时开发,由于一些权限问题,两个团队不能看到对方的代码
A团队只能看到远程仓库remote 1中的代码,B团队只能看到远程仓库remote 3中的代码
只有项目负责人能看到双方的代码,并且时不时将他们的代码合并,部署到远程仓库remote 2中
对于管理人员,就需要用不同的远程仓库地址来管理了。而这个不同的地址,在git中就会有一个代表,有一个名字,这个默认的名字就叫做origin,当然也可以是其它的名字
克隆(clone)拉取(pull)与推送(push)
配置了远程仓库之后,可以进行代码的克隆、拉取、推送
clone
通常到拿到新项目的远程仓库链接要做的第一件事情就是使用clone
git clone url ,url是远程仓库中项目的链接
你还可以通过添加../文件夹名设置项目文件夹的名字和路径
使用clone拉下的项目文件夹已经建立好和仓库的链接了,以后直接
git push即可,无需再像这样去推送代码:git push -u origin "master"
push
git push -u origin "master"
第一次推送时需要使用-u,这一句相当于下面的代码:
//将远程仓库origin的master分支与本地仓库master分支关联
git branch --set-upstream-to=origin/master master
//推送
git push origin master
往后我们只需执行git push。这里运行git push时候省略了一些参数,通常我们只有一个远程仓库,所以就默认推送到了远程的origin这个地方
git push test localbranch:remotebranch
test是远程仓库的名字,local是本地分支的名字,master是远程分支的名字,当本地和远程分支名称不同时,可以通过这种方法push到远程特定的分支
pull
当我们本地仓库已经有项目的代码了,而且已经做出了修改,但是我们不能直接push给远程仓库
因为远程仓库中已经被别人push了最新的修改,所以我们每次push之前必须先使用pull拉取最新的代码,并与本地仓库中的代码进行合并
如果有冲突(比如同时对某个文件进行修改)那么就解决冲突,解决好冲突之后再将代码push到仓库中
所以git pull就相当于 git fetch + git merge,将远程 repository 里最新的项目下载过来,并且与本地代码merge
clone和pull的区别:pull是合并代码,有冲突的话需要解决冲突。而clone是将项目代码直接拷贝到文件夹中
git pull origin remotebranch:localbranch
将远程指定分支 拉取到 本地指定分支上
git pull origin remotebranch
将远程指定分支 拉取到 本地当前分支上,可以省略冒号后的内容
git pull
这里运行git pull时候省略了一些参数,通常我们只有一个远程仓库,所以就默认拉取origin
分支的作用
一般项目中常见的几个分支有:
master主分支
用于部署生产环境的分支,我们不能直接修改master主分支中的代码
develop分支
开发人员进行开发时的分支应该都是基于develop分支,而不应该去动master分支上的代码,比如推送最新的完成和bug修复后的代码
future分支
开发新功能时用到,以develop分支为基础创建future分支,比如future/userCenter,future/dataCenter
release分支
这是发布测试阶段的分支
不管是本地仓库还是远程仓库中都有分支的存在,下面是一些常见的应用场景
首先分支是由指针所管理的,不管是合并还是删除改动之类的操作都很快
其次在团队中,项目的不同版本可以在不同的分支上进行开发,这样互不干扰,效率和容错率都很高
比如你的项目在版本1.3的时候已经发布了(1.3版本位于master分支),
然后项目负责人要求你开发新功能,你可以在版本1.3的基础上新建一个future分支,在future分支上开发新功能
当你新功能开发得差不多的时候,这时1.3的版本出现bug,项目负责人要求你先解决bug后再继续迭代新的功能
你就可以在版本1.3(处于master分支)的基础上新建一个develop分支,在develop分支中修改bug
当bug解决了,将develop分支上的代码合并到版本1.3(位于master分支)上直接发布1.3.1版本
紧接着将develop分支上的代码合并到future分支上,继续迭代新功能,新功能开发完成后就将future分支合并到master分支上发布1.4版本
以上便是分支在团队合作中的作用
git常见的命令
主要命令
-
git restore撤销工作区中对文件的修改
-
git add将工作区中修改的文件添加到暂存区
-
git restore --staged XXX放弃某次add操作
-
git reset HEAD放弃暂存区中所有的add操作
-
git checkout -- "文件名"检出本地仓库中的文件覆盖工作区中的文件(慎用)
-
git commit -m "第一次提交"提交代码修改到本地仓库
-
git clone url ../test克隆远端仓库中的项目到当前目录的上一层test文件夹中
-
git push -u origin "master"链接当前分支与远端分支,然后push本地仓库中的代码待远程仓库中
-
git push如果分支链接成功了,直接使用push即可
-
git push test localbranch:remotebranch推送代码到不同的分支
-
git pull origin remotebranch:localbranch拉取指定的远程分支中代码到本地指定的分支中
-
git pull origin remotebranch拉取指定的远程分支中的代码到当前分支
-
git pull如果分支链接成功了,直接使用pull即可
-
git remote rename 旧名字 新名字给远端仓库重设别名
查看命令
-
git status查看工作区和暂存区中的修改记录
-
列出当前配置
git config --list -
列出Repository配置
git config --local --list -
列出全局配置
git config --global --list -
列出系统配置
git config --system --list -
查看远端仓库信息
git remote -v
配置命令
-
配置用户名
git config --global user.name "你的名字" -
配置用户邮箱
git config --global user.email "你的邮箱" -
配置公钥
ssh-keygen -t rsa -C "你的邮箱"
分支命令
-
新建本地分支,但不切换
git branch <branch-name> -
查看本地和远程分支
git branch -a -
查看本地分支
git branch -
查看远程分支
git branch -r -
查看本地和远程分支
git branch -a -
从当前分支,切换到其他分支
git checkout <branch-name> -
新建一个分支,并切换到该分支
git checkout -b [branch] -
删除本地分支
git branch -D <branch-nane> -
重新命名分支
git branch -m <old-branch-name> <new-branch-name> -
合并branch分支到当前分支
git merge [branch] -
查看哪些分支已经合并到当前分支
git branch --merged -
拉取远程分支并创建本地分支
git checkout -b 本地分支名 origin/远程分支名 -
删除远程分支
git push origin --delete [branch-name]
分支的命名规范
master主分支
用于部署生产环境的分支,我们不能直接修改master主分支中的代码
develop分支
开发人员开发时是基于该分支来创建的,比如推送最新的完成和bug修复后的代码
future分支
开发新功能时用到,以develop分支为基础创建future分支,比如future/userCenter,future/dataCenter
release分支
这是发布测试阶段的分支
git commit日志规范
一般我们提交代码的时候都会记录一下该次提交所做的更改:
在控制台输入git commit -m "记录"
但有时我们需要输入更多信息,这时只需要输入git commit,git会自动打开我们的IDE工具,然后就可以在里面记录更为详细的提交日志
如果希望设置一个模板,那么需要找到.gitconfig文件,一般是位于用户根目录下
复制下面的代码到该文件中
[commit]
template=~/.gitmessage // “~/” 指的就是系统用户的根目录路径下
我们在.gitconfig的同级目录下创建一个.gitmessage文件,便可以在里面设置自己的commit模板
当我们提交git commit但是没有输入提交消息的时候就会弹出该模板
提交规范
Angular 团队的规范
<type>(<scope>): <subject> //标题行: 必须, 描述主要修改类型和内容
<body> //修改内容: 描述为什么修改, 怎么修改
<footer> //一些备注
-
type: 提交的类型
feat新特性,fix修改问题,refactor代码重构,docs文档修改style代码格式修改, 注意不是 css 修改,test测试用例修改chore其他修改, 比如构建流程, 依赖管理 -
**scope: **commit 影响的范围,比如: route,,component等等
-
subject: commit 的概述
例子: fix(index.html): 删除第56行多余的div标签
git log命令
git log的作用就是查询git commit的日志
-
git log --author=xxx查询某个作者的commit日志
-
git shortlog查询所有的commit日志,但是按照作者来归类
-
git show commitID查看某次commit的修改
所以我们规范了提交日消息的格式,当查询日志的时候便会一目了然,比如下图:
.gitignore文件
.gitignore文件的作用是忽略文件,让某些文件不受git所管理,比如说node_modules中的文件
# 忽略 .a 文件 不管是当前目录下还是子目录下的 .a 文件都忽略
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# "?"表示匹配单个字符,如忽略 x.b 文件,不忽略 xx.b
?.b
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 前面添加正斜杠/避免递归,同时忽略当前目录下 node_modules文件夹,但不包括子目录下的 subdir/node_modules
/node_modules
#忽略 build/ 目录下的所有文件 不管是当前目录下的 build/ 还是子目录下的 build/ 都忽略
build/
#忽略当前目录下的 now/ 目录
/now/
# 匹配a、b、c
[abc]
# 匹配0至9的数
[0-9]
#忽略 test/c.p, 不包括 server/test/c.p
test/*.p
#忽略所有的 .pdf 文件 在 doc/ directory 下
doc/*/*.pdf
例子:在项目根目录中新建 .gitignore 忽略文件,并配置如下:
# 忽略 node_modules 和 dist目录
node_modules
unpackage/dist
注意:如果 unpackage 目录中仅有一个dist 目录,因此默认情况下, unpackage 目录不会被 Git 追踪
此时,为了让 Git 能够正常追踪 unpackage 目录,我们可以在 unpackage 目录下创建一个叫做
.gitkeep的文件进行占位
关于.gitignore注意事项
- 配置文件的完整文件名就是
".gitignore",注意最前面有个“.”; - 配置文件是按行从上到下进行规则匹配的,如果前面的规则匹配的范围更大,则后面的规则将不会生效
- 该文件只能作用于
Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件);如果想要忽略已经被git记录过的文件,那么得先把本地缓存删除(改变成未track状态),然后再提交该文件
//首先查询被忽略的文件及文件夹,然后检查要忽略的文件是不是没被忽略
git status --ignored
//清除git中相应的缓存
git rm -r --cached . //.代表清除全部缓存
git rm -r --cached unpackage/dist/ //清除特定的目录地址
//修改.gitignored文件之后,提交相应的代码
git add .(或filename)
需要注意,倘若清除了全部缓存,那么重新提交本地文件到仓库时,那么必须使用git add .来添加所有的本地文件,否则如果仅仅git add xxx文件,那么远程仓库中的所有文件就会被删掉,然后只剩下xxx文件
强制提交被git忽略过的文件
$ git add App.class
//The following paths are ignored by one of your .gitignore files: App.class
//Use -f if you really want to add them.
如果你确实想添加该文件,可以用-f强制添加到Git:
$ git add -f App.class
VSCode中git显示不同颜色块的含义
红色,未加入版本控制; (刚clone到本地)
绿色,已经加入版本控制暂未提交; (新增部分)
蓝色,加入版本控制,已提交,有改动; (修改部分)
白色,加入版本控制,已提交,无改动;
灰色:版本控制已忽略文件。
VSCode中git文件标识
A: 增加的文件.
C: 文件的一个新拷贝.
D: 删除的一个文件.
M: 文件的内容或者mode被修改了.
R: 文件名被修改了。
T: 文件的类型被修改了。
U: 文件没有被合并(你需要完成合并才能进行提交)
X: 未知状态