文章目录
一、起步
1. 关于版本控制
在集中化的版本控制系统中,最典型的代表就是SVN,在十年以前最流行的版本控制系统是SVN,但是随着时代的发展已经无法满足我们的需求了。
2. Git基础概念
二、Git基础
1. 安装并配置Git
2. Git的基本操作
初始的必要文件是很重要的,如果删除了.git隐藏目录,那这个项目的仓库也销毁了
.git文件夹里的初始文件如下:
Untracked files
表示以下文件都是未被跟踪的
两个红色问号代表 :未被追踪的文件
Untracked: 未跟踪
Unmodified: 未修改
Modified: 已修改
Staged: 已暂存
撤销操作危险性比较高,慎重操作!
(前面的A和M)由红色变成绿色说明文件都放到暂存区里了
提醒:
如果是“git reset HEAD .” 则意为移除暂存区所有的文件
示范:
绿色的D代表该文件已经移除了,下一次提交不会带上它,双问号意味着文件不在仓库了,在工作区
使用步骤:
创建一个.gitignore文件,在文件中写明需要忽略的文件,同时创建一个test文件夹用于测试忽略文件
git status -s查看文件状态,只有文件.gitignore的返回状态,而没有涉及index.css和test文件夹,因为忽略文件的存在,他们已经默认被忽略了
注意:
在切换回旧版本后,若想查看所有提交历史的话,应该使用git reflog --pretty=oneline
实际演示如下:(先展示以往的提交历史,然后回退到80f2607版本,查看目前的提交历史,再跳转回最新的版本)
三、Github
1. 了解开源相关的概念
作为前端人员,如果以后有了自己的开源项目,可以使用MIT协议
博客链接link
Git只是一个版本控制工具,但是Github是一个网站,一个开源项目托管平台
2. 注册账号
3. 远程仓库的使用
注意:
建议仓库名称不要用中文同时不要包含空格
3.1 新建空白远程仓库
3.2 新建空白远程仓库成功
3.3 远程仓库的两种访问方式
3.4 基于 HTTPS 将本地仓库上传到Github
演示:
如在本地有现成Git仓库,则在git文件夹里打开Git Bash Here,将红框内的代码(以操作界面的代码为准)逐行复制,在Git Bash Here运行,弹出登录框,登录成功后授权,Git Bash Here的输入框弹出以下信息(100%)即代表向我们的仓库成功上传文件
git push命令
(本地向远程更新)将本地仓库中的内容推送到远程仓库中:当本地仓库中文件更新后,需要向远程仓库更新可以使用git push命令
演示说明:
首先我们在本地仓库git文件夹中新建了一个index.js文件,相当于本地仓库进行了更新,我们想把本地仓库的更新同步到远程仓库中,首先(git add .)将index.js文件添加到暂存区,然后(git commit -m “新增了js文件”)将文件从暂存区提交到本地仓库,最后git push更新远程仓库(第一次推送给远程仓库需要执行完整git push代码,在这之后的更新则只需要在Git Bash Here中输入简短git push即可)
3.5 SSH key
3.6 生成 SSH key
生成SSH key:
3.7 配置 SSH key
3.8 检测Github的SSH key是否配置成功
示范:
3.9 基于SSH将本地仓库上传到Github
演示:
创建一个空白仓库
点击SSH选择该访问方式
运行方框的指定代码,向远程仓库推送内容
3.10 将远程仓库克隆到本地
假如本地仓库被删除了,可以克隆远程仓库还原文件。
如何得到远程仓库的地址:
- 选择Code
- 选择访问方式(SSH比较方便一点)
- 复制远程仓库的地址
四、Git分支(重点)
1. 本地分支操作
1.1 分支的概念
1.2 分支在实际开发中的作用
1.3 main主分支(master现在叫main)
注意
:现在的版本,master被更换成了main,所以是main主分支
术语master的更换背景详情:link
1.4 功能分支
1.5 查看分支列表
1.6 创建新分支
1.7 切换分支
演示:
git branch 查看分支
1.8 分支的快速创建和切换
演示:
(要注意,新建并切换命令前,一定要先回到main主分支上,再进行新建切换命令)
1.9 合并分支
演示(实际开发流程):
如我们的任务是写login登录分支的功能,在完成login分支各个文件的编写后,我们首先将文件放到暂存区,然后提交到仓库,最后合并login分支给main分支
1.10 删除分支
注意:删除分支的前提是当前不在它本身上,需要切换到其他分支上再进行删除操作。
(git branch -D reg
)删除本地仓库的分支(特定用于该分支没有和main主分支合并
的情况下,需要强制删除该分支):
1.11 遇到冲突时的分支合并
演示描述:
(首先在reg分支上时,打开login.html文件进行修改,然后进行文件转暂存区,再提交给仓库,之后切换为main分支,同样打开login.html文件进行修改但是修改内容不一样,再进行暂存区和提交仓库操作,最后进行在main分支上合并reg分支,因为在不同的分支上对同一个文件做了不同的修改,于是产生代码冲突)
演示如下:
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git branch
login
main
* reg
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git status -s
M login.css
M login.html
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git add .
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git commit -m "在reg分支上修改了login.html"
[reg b764b16] 在reg分支上修改了login.html
2 files changed, 7 insertions(+)
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git status -s
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (reg)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git status -s
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git status -s
M login.html
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git add .
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git commit -m "在master分支上修改了html文件"
[main 91663b0] 在master分支上修改了html文件
1 file changed, 1 insertion(+)
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git checkout main
Already on 'main'
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
ASUS@LAPTOP-LSM1BD33 MINGW64 /d/1学习资料/计算机类/Web前端/测试/可删/project01 (main)
$ git merge reg
Auto-merging login.html
CONFLICT (content): Merge conflict in login.html
Automatic merge failed; fix conflicts and then commit the result.
返回提示"Merge conflict in login.html"意为login.html的合并冲突
手动解决冲突:
HEAD (Current Change):在main主分支上修改的情况
reg (Current Change):在reg分支上修改的情况
Accept Current Change(采用当前更改):只保留当前的修改,也就是main主分支上的修改
Accept Incoming Change(采用传入的更改):使用reg分支上的修改
Accept Both Changes(保留双方更改):双方的修改都保留,这时需要我们手动解决冲突
Compare Changes(比较变更):比较按钮
手动解决冲突之后,提交以下命令
2. 远程分支操作
2.1 将本地分支推送到远程仓库
演示如下:
- 可以看到远程仓库只有main主分支,而我们本地的login和reg分支都不在里面。
- 因为是第一次推送,故需要带 -u 参数(远程仓库的别名
默认使用origin
),这里要注意在分支经历过第一次推送之后,后面更新只需要使用git push 将代码推送到远程分支
- 输入命令后刷新我们的远程仓库,可以发现多了一个register分支
2.2 查看远程仓库中所有的分支列表
远程仓库的名称默认是origin
演示:
2.3 跟踪分支
演示:
- 从远程仓库中,把对应的远程分支下载到本地仓库,
保持本地分支和远程分支名称相同
(从远程仓库下载分支过来的话,下载到本地仓库这个分支它会是在远程仓库的名字),原来在本地叫reg,从远程仓库下过来它叫register
- 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
说明:
本地分支名称:在本地取什么名字
远程仓库名称:默认为origin
远程分支名称:想要从远程仓库中下载的分支
2.4 拉取远程分支的最新的代码
演示:
首先在远程仓库里register分支下直接修改login.js文件,这样相较于本地仓库的reg分支,本地需要更新了。
切换到register分支,点击login.js文件
点击修改按钮,进行编辑
修改完毕之后提交修改,这样远程仓库分支下的login.js就是更新了
想更新本地对应分支的login.js,如下操作(git pull)
此时本地对应分支的login.js已经更新,与远程仓库中对应分支的login.js同步了
打开本地login.js文件检查一下,已经完成更新
2.5 删除远程分支
演示:
输入指令,删除远程仓库的register分支
命令执行后,远程仓库里只存有main主分支了,原来的register分支已经被删除