<!--Ctrl+[ 提升列表等级;Ctrl+1 一级标题 -->
# 一、用于版本控制
版本控制工具需要的功能
协同修改、数据备份、版本管理、权限控制、历史记录、分支管理
分布式版本控制 vs 集中式版本控制
集中式版本控制需联网才能需要
# 二、Git 简介
本地库和远程库
团队内成员操作
想找不是团队内的成员 东方不败 来帮忙,那就需要他 fork 一下,这样对于修改可以进行 pull request,经过审核后可以 merge 到原来的远程仓库
# 三、Git 命令行操作
主体内容:
# 本地库初始化
git init
初始化后效果:会生成一个.git 隐藏文件。使用 ll .git/ 可以查看
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不能胡乱修改
# 设置签名
形式 例如:
用户名:tom
Email 地址:git@bala.com
作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账户、密码没有任何关系
命令
项目级别 / 仓库级别:仅在当前本地库范围内有效
git config user.name tom
git config user.email tom@bala.com
设置后,信息会保存到 .git/config [下面用 cat 命令查看这个文件]
系统用户级别:登录当前操作系统的用户范围
- git config --global user.name tom
- git config --global user.email tom@bala.com
- 信息保存位置:./.git/config 文件
级别优先级
- 就近原则:项目级别优先于用户级别,二者都有时采用项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有不允许
# 操作命令
状态查看操作 git status 【该命令特别常用】
添加操作 git add 文件名
把 untrack 的文件加入到暂存区。将工作区的 “新建 / 修改” 添加到暂存区
提交操作 git commit 文件名
把文件从暂存区提交到本地库
执行该命令后需要输入 commit message,即这次 commit 的相关注释。
因为使用的是 vim 编辑器,可以 i 键进入编辑模式,ESC 进入命令模式,命令模式下输入:wq 进行保存并退出
图片展示中的 2 insertions 代表两行,新加的 good.txt 文件确实里边只有两行文字。
- 执行 git commit 命令后会进入 vim 文本编辑器,需要输注释。下面是一种更简单的方法
git commit -m "这里写注释" goood.txt
查看历史记录操作
git log
查看历史操作
如果提交次数特别多,历史记录会一屏放不下。多屏显示控制方式
空格向下翻页;b 向上翻页;q 退出
可以使用 --pretty 增加参数
git log --pretty=oneline
显示一行git log --oneline
也是每次提交仅显示一行,与上面的命令相比,hash 值会变短git reflog
可以增加显示要移动几次指针来回复到对应版本
版本前进和后退
基于索引值操作(推荐)
git reset --hard 索引值
【索引值可以通过 git reflog 获得,选中索引,然后粘贴】使用 ^ 符号
该命令只能后退
git reset --hard HEAD^^
几个 **^** 代表退几步
使用~符号
该命令也只能后退
git reset --hard HEAD~n
n 代表后退 n 步
reset 命令的三个参数对比
--soft 参数 仅仅在本地库移动 HEAD 指针
--mixed 参数 在本地库移动 HEAD 指针;重置暂存区
--hard 参数 在本地库移动 HEAD 指针;重置暂存区;重置工作区
git help 命令
永久删除文件后找回
在工作区删除后,提交到本地库,可以通过 reset 回到之前的版本,之前版本还保留该文件
- 前提:删除前,文件存在时的状态提交到本地库
- 操作:git reset --hard [指针位置]
- 删除操作已经提交到本地库,则指针位置指向历史记录
- 删除操作没有提交到本地库,指针使用 head
比较文件差异
- git diff [文件名]
- 将工作区中的文件和暂存区进行比较
- git diff [本地库中的历史版本] [文件名]
- 将工作区中的文件和本地库历史记录比较
- 不带文件名则可以比较多个文件
- git diff [文件名]
分支管理
分支:在版本控制过程中,使用多条线同时推进多个任务
分支的好处:
- 同时并行推进多个功能的开发,提高开发效率
- 如果发现某个分支有问题,可以删除该分支不影响主干
如何查看分支
git branch -v
如何创建分支
git branch [新的分支名字]
切换分支
git checkout [分支名字]
切换到某个分支合并分支
git branch -v
第一步,切换到接受修改的分支(被合并,增加新内容)上
git checkout master
到接受修改的分支,比如合并到主分支第二步,执行 merge
git merge [被合并的分支名]
解决冲突
冲突的表现
冲突的解决
- 第一步:编辑文件,删除特殊符号
- 第二步:把文件修改到满意的程度,保存退出
- 第三步:git add [文件名]
- 第四步:git commit -m “日志信息”
- 注意:此时 commit 一定不能带具体文件名
# 四、Git 基本原理
Hash
2. 创建分支 ---> 创建指针;
切换分支 ---> 切换指针;
# 五、Github
首先创建一个 Github 账号,然后创建一个 repository。复制这个仓库对应的地址,然后在本地添加一下这个地址(这样就不用每次都写它了)
- 这里初始化仓库
git init
- 添加远程仓库,` 之后可以使用别名 origin 指代该仓库
- 向该仓库推送
git push origin master
格式:git push 仓库地址(名) 分支名
- 这里初始化仓库
git remote add 地址别名 地址
git push 地址别名 分支名
克隆
- 直接使用命令
git clone [远程地址]
- 效果
- 完整地把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
- 直接使用命令
拉取
- pull = fetch+merge
- git fetch 【远程库地址别名】【远程分支名】
- git merge 【远程库地址别名 / 远程分支名】
- git pull 【远程库地址别名】【远程分支名】
如果没冲突,就直接从远程 pull;如果不确定,可以先 fetch 下来看看,再决定 merge
协同开发时冲突的解决
- 要点
- 如果不是基于 Github 远程库的最新版所作的修改,不能推送,必须先拉取。
- 拉取下来后如果进入冲突状态,则按照 “分支冲突解决” 操作解决即可
- 要点
跨团队协作
- Fork
- pull requestes
Eclipse 中 Git 使用
介绍了在 Eclipse 使用 Git 。 应该 pycharm 或者 VSCode 也可以?
# 六、Git 工作流
这里安装 Gitlab 为啥????