一、Git简介
1.Git结构
2.Git和代码托管中心
- 局域网环境下
- GitLab服务器
- 外网环境下
- GitHub
- Gitee码云
3.本地库和远程库
团队内协作
团队间协作
4.git工作流程
二、Git命令行操作
1.本地库初始化
描述:创建一个文件夹,作为本地仓库。命令行使用git init在该目录下初始化仓库。初始化完成后会生成一个.git隐藏目录。
命令:git init
效果:
2.设置签名
-
形式
- 用户名:deserts
- Email地址:zoea@126.com
-
作用:区分不同开发人员的身份
-
命令
-
项目/仓库级别:仅在本地仓库范围内有效
- git config user.name deserts
- git config user.eamil zoea@126.com
-
系统用户级别:登录当前操作系统的用户范围
- git config --global user.name deserts_g
- git config --global user.eamil zoea_g@126.com
-
级别优先级
- 就近原则:项目级别优于系统用户级别,两个都有时采用项目级别
- 不允许两个级别都没有
-
示例:
-
项目级别签名信息保存的位置
.git/config
-
查看全局签名配置:放在家目录下的.gitconfig文件下
-
3.添加提交和查看状态
命令:git status
创建一个文件后,查看状态:
这时提示可以使用git add 去追踪
- git add:将文件添加到暂存区
- git rm --cached :撤销添加到暂存区
- git commit: 将暂存区的文件提交到本地仓库
当文件被修改后:
使用git add添加到暂存区
使用git commit -m “modified” hello.txt添加注释并提交
4.版本前进后退
查看版本历史记录:git log
git log --pretty=oneline
git log --oneline
git reflog
版本前进后退的本质:移动HEAD指针
使用索引值操作
命令:git reset --hard 部分索引值
reset三个参数对比
- hard: 在本地库移动HEAD指针,并且重置暂存区和工作区
- soft: 仅仅是在本地库移动HEAD指针
- mixed:在本地库移动HEAD指针,并且重置暂存区
5.删除文件后找回
删除文件
提交到暂存区
提交到本地仓库:
版本回退:
被删除的文件可以恢复。
- 添加到暂存区的文件删除恢复: git reset --hard HEAD
6.比较文件
7.Git分支
查看分支版本
命令:git branch -v
创建分支
命令:git branch 分支名
切换分支
命令:git checkout 分支名
合并分支
步骤:
- 切换到被合并的分支上面
- 使用git merge 【合并分支名】来合并分支
示例:
hot_fix分支对test.txt进行修改,并切换到master分支
合并hot_fix分支:
解决合并分支冲突
冲突的产生:不同分支的同一个文件都被修改了,这时要合并分支时两个修改的文件要指定一个为合并后的分支的文件。这时需要决定哪一个修改并入该分支中。
冲突的表现:
这时需要我们去修改这个文件,作为最终修改的版本
添加到暂存区:
提交到本地仓库(不能带文件名):
步骤总结:
三、Git基本原理
1.哈希加密算法
对两个文件进行加密,通过加密结果比对来验证两个文件是否发生了变化,若发生了变化,两个结果相差会很大。
2.Git保存版本的机制
Git的文件管理机制:使用快照机制
3.Git分支管理的机制
本质是HEAD指针的切换
四、使用Github
1.本地库和远程库的交互
2.GitHub创建远程仓库
1.注册一个账号
2.创建一个远程仓库
填写创建仓库的信息
创建成功
3.往远程仓库push
1.查看远程仓库地址
2.给远程仓库起别名
- 命令: git remote add 别名 地址
3.推送
- 命令:git push 别名 分支名
这时会有一个master分支了
4.clone操作
命令:git clone 地址(默认项目主分支,项目创建时的分支)
从远程仓库克隆到本地有三个效果:
- 完整地把远程库下载到本地
- 创建origin远程别名,可以使用这个别名直接push
- 初始化本地库
clone指定分支:git clone -b 分支名 地址
5.加入团队
本地clone远程仓库后,需要加入团队后才能push。
1.添加队员
2.复制邀请链接发给队员
3.队员访问邀请链接,加入团队。这样队员就能push了。
6.pull拉取
当队员B修改了,队员A需要拉取代码进行开发;需要先fetch查看一下(读操作)
git fetch origin main:
查看远程库的内容:git checkout origin/main, 这样切换到分支就可以查看远程仓库的内容了
查看完修改完,可以merge,merge完远程的东西就都合并了
pull = fetch + merge
7.解决冲突
8.跨团队之间协作
1.让别的团队成员访问你的远程仓库地址,在远程仓库中fork
2.fork之后会到自己远程仓库,自己可以进行操作
3.自己在本地和远程仓库操作后,可以想原项目的远程仓库发起pull request
4.原项目可以审核并讨论
9.SSH免密登录
1.进入家目录: cd
2.把以前的SSH目录删掉: rm -r .ssh/
3.生成ssh目录:ssh-keygen -t ras -C GitHub邮箱
4.进入.ssh目录查看id_ras.pub文件,并复制:
5.在自己GitHub账号上的settings里,点击SSH and GRG keys设置SSH keys
6.输入密码确认
7.可以看到已经生成的SSH keys
8.回到命令行测试。修改文件并commit到本地仓库
9.到GitHub仓库上复制SSH地址
10.创建本地的SSH地址别名
11.把本地仓库的内容推送到远程仓库上,这时不需要密码登录
12.可以看到,已经成功推送了
五、IDEA中使用Git
1.安装Git
已经安装Git,IDEA中会自动集成
2.登录Github账号
3.创建本地仓库
点击创建
创建成功
在本地也能看到.git文件夹了,说明本地仓库创建成功
4.add、commit、push等操作
点击项目右键的Git,可以进行命令行的那些操作:
常用的快捷操作:
示例:
1.创建一个新文件,创建完成后可以选择直接添加到暂存区
2.将所有文件添加到暂存区
3.提交到本地库
选择文件和添加注释
5.查看历史
点击快捷键可以查看历史
点击具体的版本还可以查看变化的详情
版本回退:点击具体的版本右键复制哈希值
回退版本:
跟据哈希值回退:
查看前面的历史版本需要在控制台中,可以在IDEA中集成Git
使用Git命令:
6.创建分支、合并分支
创建分支
合并分支
解决冲突:
7.将本地库上传到GitHub
选择地址
选择分支和版本上传
8.更新本地库
当远程库发生修改,取push时自己不是最新版本,会失败
pull操作:
六、Git工作流
1.概念
在开发中使用Git的方式
2.分类
-
集中式工作流:类似与SVN
-
GitFlow工作流:团队内使用分支,常用
-
Forking工作流:给团队外成员;虚拟团队