1.git简介
GIT概念
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
保密程度高一般使用集中式
作用
代码备份
版本控制
版本回退
协同工作
责任追溯
根据提交记录找人
区别
svn是集中式的,代码集中于中央服务器
git是分布式的,在本地仓库和远程仓库都能进行处理
安装和配置
安装
测试
git -v
配置
git config --global user.name "fudong"
git config --global user.email "fudong@qq.com"
查看配置
git config --list
- 工作区: 就是你在电脑里能看到的目录。
- 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
2.本地仓库
概念
工作目录
代码的存放位置
暂存区
代码提交到仓库之前的临时存储空间
本地历史仓库
用于存放不同版本的代码
暂存区存在的意义
用于临时保存用户的修改,以便稍后提交到仓库
可以选择性提交
可以允许对多个文件进行统一的管理和操作,确保一次性提交的文件是你希望保存的内容
命令
git init
初始化创建git仓库
git status
查看Git状态
git add 文件名
将本地文件添加到暂存区
git add .
将本地所有文件添加到暂存区
git commit -m '提交的信息'
提交,将暂存区中的所有代码提交到本地历史仓库
git log
查看日志(查看历史提交记录)
q
退出
操作
- 创建一个文件夹,01-git-local,通过code打开
- 使用git init操作,初始化本地仓库
- 创建了一个文件a.html
- 使用git status命令,查看状态,提示没有添加
- git add . 添加到暂存区( 绿字变A,表示已经被添加了
- 使用git commit -m '提交的信息' 将a.html文件提交到本地仓库
- 使用git log查看日志(历史提交记录)
3.版本切换
命令
git reflog
可以查看所有分支的所有操作(更加精简的展示日志)
git reset --hard
版本唯一索引值,切换版本
操作
- 创建一个b.html
- 使用git add . 添加暂存区
- 使用git commit -m '提交的信息' 将b.html提交到本地仓库
- 使用git log查看日志
- 使用git reflog 查看精简日志
- 使用git reset --hard 版本唯一索引值,切换版本
4.分支管理
概念
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作
一般用于周期较长的模块开发,或者是尝试性的模块开发
命令
显示所有分支
git branch
创建分支
git branch 分支名
修改分支名称
git branch -m 旧分支名 新分支名
切换分支
git switch 分支名 (新写法,推荐)
git checkout 分支名(老版本,不推荐
合并分支到当前分支
git marge 要合并的分支名
删除分支
git branch -d 分支名
操作
- 创建一个文件夹,02-git-branch,通过code打开
- 使用git init操作,初始化本地仓库
- 创建了一个文件a.html,并提交(第一个版本
- 创建了一个文件b.html,并提交(第二个版本
- 创建一个test分支(git branch test
- 切换到test分支(git switch test
- 创建c.html,并在test分支上进行了一次提交(版本三
- 使用git log命令,查看当前版本所在的分支,为test
- 安装gitlens插件,查看分支结构
- 切换到主分支(git switch master)
- 合并到test分支 (git merge test)(一定要先切换到主分支再合并其它分支)
- 删除test,c文件出现在了主分支上(git branch -d test)
5.远程仓库
概念
git远程仓库是互联网上托管的git代码仓库,它可以帮助团队成员之间协作开发同一个项目
可以保证代码的安全性和可靠性
本地推送到远程
创建远程仓库
- 设置git账号(自己注册)
- 生成SSH公钥 公钥设置
-
- cd ~/.ssh (查看是否生成过ssh公钥(可以忽略
- git config --list 查看设置的git账户和邮箱
- ssh-keygen -t ed25519 -C "邮箱" 然后按三次回车生成的图案,就是公钥
- cd.ssh (进入c:\Users\用户名.ssh 文件夹)
- more id_ed25519.pub (查看生成的公钥,或用记事本打开id_ed25519.pub文件) 得到公钥
- ssh-ed25519 XXXprbAW6Si4McKtxOsC+K/OYhgGonkIUv15x2enoOCXK 用户名@qq.com
- 登录码云,在账号设置的ssh公钥中复制上面的部分,设置公钥
- 公钥测试 ssh -T git@gitee.com
出现既成功
- 创建远程仓库
-
- 新建一个仓库,填写路径和仓库名
- 得到一个仓库
- 选择ssh复制仓库路径git@gitee.com:用户名/git-local-01.git
推送代码到远程仓库
- 为远程仓库地址起了一个别名(一般使用这个别名origin
-
- git remote add origin git@gitee.com:用户名/git-local-01.git
- 推送 git push -u origin master
注意,如果多次给仓库起别名,会报错error: remote origin already exists.
则使用 git remote rm origin 移除别名,再git remote add origin
远程拉取到本地
- 如果是第一次,需要克隆到本地,选择任意一个文件夹,作为要克隆的地方
-
- git clone 仓库地址
- 仓库地址—— git@gitee.com:用户名/git-local-01.git
- 模拟张三新增了一个功能(添加了一个文件 c.html)
-
- 先git add . 添加到暂存区
- 再git commit -m '信息'提交到本地仓库
- 最后git push -u origin master 推送到远程仓库
- 领导想检查代码,不需要克隆了,只需要pull
-
- git pull 远程仓库名 分支名(git pull origin master
代码冲突的解决
程序员1(张三)修改了c.html 文件,第一行是111
-
- 先git add . 添加到暂存区
- 再git commit -m '信息'提交到本地仓库
- 最后git push -u origin master 推送到远程仓库
程序员2(BOSS)修改了c.html 文件,第一行是2222
-
- 先git add . 添加到暂存区
- 再git commit -m '信息'提交到本地仓库
- 最后git push -u origin master 推送到远程仓库
报错
出现原因,代码冲突,拒绝提交
正确的解决方式
只要推送到远程之前,先做拉取操作,解决完代码冲突之后,再推送
-
- git pull 远程仓库名 分支名 拉取到本地
- 解决冲突后,再添加git add . 提交 git commit -m '信息' 推送到远程 git push -u
- git pull 远程仓库名 分支名 拉取到本地
推送案例
将学生管理系统代码推送到远程仓库
- node-modules不需要提交到远程仓库
-
- 创建一个.gitignore文件
- 内容为node_modules
- 使用git init 初始化git仓库
- 添加暂存区 提交本地仓库
- 创建远程仓库,推送到远程仓库
- 在另一个文件夹下从远程仓库克隆内容 git clone 仓库地址
- 进入目录,npm i 下载所需的依赖
- 再npm run server