Git操作
学习目标
- 初步了解Git
- 安装Git本地服务
- 创建远程仓库
- 掌握Git常用命令
- 了解公司如何使用Git
- 熟悉常见错误
1. Git的介绍
git是一个开源的分布式版本控制软件,是目前世界上最先进的分布式版本控制系统
2. Git的工作原理
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
流程如下:
- 【Workspace工作区】                        →添加→     【Index / Stage暂存区】
- 【Index / Stage暂存区】                    →提交→     【Repository仓库区(或本地仓库)】
- 【Repository仓库区(或本地仓库)】→推送→     【Remote远程仓库】
- 【Remote远程仓库】                          →克隆/取→【Repository仓库区(或本地仓库)】
- 【Repository仓库区(或本地仓库)】→检出→      【Workspace工作区】
- 【Remote:远程仓库】                       →拉取→     【Workspace工作区】
3. Git文件状态
使用Git管理文件,会有以下四种状态:
- 未被追踪的(Untracked):在工作区创建了文件,没有添加到[暂存区]。 使用git status -s查看文件状态时,文件名前有“??”标识
- 已添加至[暂存区](staged):使用了add命令添加了文件到[暂存区]。 使用git status -s查看文件状态时,文件名前有绿色“A”标识
- 已添加至[暂存区],后修改了文件(Modified):使用了add命令添加了文件到[暂存区],又修改了文件。 使用git status -s查看文件状态时,文件名前有“绿A红M”标识,需要再次进行add操作。
- 已提交至[仓库区](Committed):使用了commit命令提交文件到[仓库区]。 使用git status -s查看文件状态时,文件已不在待提交列。
- 已提交至[仓库区],后修改了文件:使用了commit命令提交文件到[仓库区],又修改了文件。 使用git status -s查看文件状态时,文件名前有“红M”标识,需要再次执行commit命令。
- 已提交至[仓库区],后修改了文件,又再一次添加至[暂存区]: 使用了commit命令提交文件到[仓库区],又修改了文件,又执行add命令添加至[暂存区]。 使用git status -s查看文件状态时,文件名前有“绿M”标识,表示版本已追踪。
- 已提交至[仓库区],后修改了文件,又再一次添加至[暂存区],又进行了删除: 使用了commit命令提交文件到[仓库区],又修改了文件,又执行add命令添加至[暂存区],再使用rm命令删除文件。 使用git status -s查看文件状态时,文件名前有“绿M红D”标识,表示文件已删除,但可以被恢复。
- 已提交至[仓库区],又进行了删除:使用了commit命令提交文件到[仓库区],再使用rm命令删除文件。 使用git status -s查看文件状态时,文件名前有“红D”标识,表示文件已删除,但可以被恢复。
- 首次提交至[暂存区],后删除了文件:使用了add命令添加文件到[暂存区],又执行rm命令删除文件。 使用git status -s查看文件状态时,文件名前有“绿A红D”标识,表示文件已删除,但可以被恢复。
- 未被追踪的文件,进行删除:未使用了add命令添加文件到[暂存区],直接执行rm命令删除文件。 使用git status -s查看文件状态时,文件名已不存在,表示文件已删除,且无法被恢复。
补充(以下为文件状态扭转的中间态,了解即可):
4. SVN与GIT的区别
1. 工作模式:
    ① git是分布式的,git跟SVN一样有自己的集中式版本库或服务器。但git更倾向于被使用于分布式模式, 也就是每个开发人员从中心版本库/服务器上checkout代码后会在自己的机器上克隆一个自己的版本库。Git的绝大多数操作都只需要访问本地文件和资源,不用连网。
    ② SVN集中式的,只能在同一局域网下进行操作。集中式指所有的文件全部集中在服务器上进行管理。SVN差不多所有操作都需要连接网络,局限性较高。
2. 安全性:
    ① [存储文件]方面,SVN更安全,因为使用局域网保存。
    ② [提交操作]方面,Git更安全。
    ③ [文件备份]方面,Git更安全,更易恢复文件。
5. Git本地服务下载
可以自行去官网下载最新版:git-scm.com或者gitforwindows.org
6. 安装Git本地服务
① 在介绍页点击Next(下一步):

② 点击Browse(浏览),更改到非C盘的路径:

③ 无需选择其他组件,直接点击Next(下一步):

④ 无需更改程序名,直接点击Next(下一步):

⑤ 中间省略多步,都直接下一步即可,直到最后完成,点击Finish(完成):

⑥ 回到桌面,右键。若出现以下图标,则表示安装成功:

7. 创建远程仓库
① 打开浏览器,输入网址:https://gitee.com/ 进入码云官网:

② 点击右上角的【注册】按钮(若有账号,可以直接去登录):

- [姓名]可输入中文
- [个人空间地址]建议使用姓名拼音,如果被占用,可再追加数字
- [手机号]需要真实手机号,后续手机号会作为账号
③ 点击右上角【+】图标,选择【新建仓库】:

④ 填写仓库信息,并创建:

- [仓库名称]可以输入中文
- [路径]不可以输入中文
- [权限]选择“私有”
- 其他选择可以不输入、不选择,直接点击【创建】即可
⑤ 创建成功后,会进入到仓库使用说明界面,点击【复制图标】即可复制仓库地址:

8. Git快速体验
① 任意进入一个学习用的文件夹(非C盘):

② 进入文件夹后,右键,选择Git Bash Here(Git命令行),会出现如下窗口:

③ 根据Git仓库的[简易的命令行入门教程]体验Git:

命令解释:
① git config --global user.name "苏芙蓉欧耶" // 设置全局名称:苏芙蓉欧耶
② git config --global user.email "5603803+sufurong@user.noreply.gitee.com" //设置全局邮箱:写自己的邮箱
③ mkdir wwt105 //在当前本地目录创建一个文件夹,名为:wwt105
④ cd wwt105 //进入wwt105文件夹
⑤ git init //初始化当前文件夹,成为本地Git工作区
⑥ mkdir wwt105 //在当前本地目录创建一个文件夹,名为:wwt105
⑦ touch README.md //寻找README.md文件,若不存在该文件,会自动创建
⑧ git add README.md //将README.md文件添加至[暂存区]
⑨ git commit -m "first commit" //将[暂存区]的文件,提交至[仓库区],并写描述“first commit”
⑩ git remote add origin https://gitee.com/sufurong/wwt105.git //添加指定的[远程仓库]地址
⑪ git push -u origin "master" //将[仓库区]的文件推送到[远程仓库]的master分支
9. Git常用命令
| 命令 | 描述 |
|---|---|
| git version | 查看当前Git服务版本 |
| git init | 初始化文件夹,作为Git工作区 |
| git config --global user.name "小白" | 设置全局用户名为“小白” |
| git config --global user.email 826789@qq.com | 设置全局邮箱为“826789@qq.com” |
| git config --list | 查看当前设置项 |
| git clone 仓库地址 | 克隆某仓库地址上的文件,到本地工作区 |
| git add 文件名 | 将某个文件添加到[暂存区] |
| git add 文件名1 文件名2 文件名n... | 将某些文件添加到[暂存区] |
| git add . | 将当前所有文件添加到[暂存区] |
| git status | 查看仓库当前的文件状态。 |
| git status -s | 简短地查看仓库当前的文件状态。 |
| git diff | 比较文件的不同,即暂存区和工作区的差异 |
| git commit -m 文件名 | 将[暂存区]的某个文件,提交到仓库区 |
| git commit -m 文件名1 文件名2 文件名n... | 将[暂存区]的某些文件,提交到仓库区 |
| git commit -m '描述信息' 文件名 | 将[暂存区]的某个文件,提交到仓库区,并写描述信息 |
| git commit -m '描述信息' | 将[暂存区]的所有文件,提交到仓库区,并写描述信息 |
| git commit -am '描述信息' | 文件已被追踪,又被修改,该命令可以跳过add操作,直接提交到[仓库区] |
| git log | 查看历史提交记录 |
| git remote add origin 远程仓库地址 | 添加远程仓库地址 |
| git remote -v | 查看远程仓库地址 |
| git pull origin master | 将远程库文件中合并到本地 |
| git pull --rebase origin master | 远程库文件中合并到本地,–rebase的作用是取消掉本地库中之前的提交 |
| git push origin master | 将本地的 master 分支推送到 origin 主机的 master 分支 |
| git push -u origin master | 将本地的 master 分支推送到 origin 主机的 master 分支,同时设置之后可以直接使用git push进行提交文件 |
| git branch | 查看当前已有的分支(已同步至本地的) |
| git branch 分支名 | 在本地新建一条分支 |
| git checkout 分支名 | 切换到指定的分支上 |
| git push origin 分支名 | 将本地分支推送至云端 |
| git branch -d 分支名 | 将指定的分支删除(仅本地) |
| git fetch origin 分支名 | 拉取远程指定的分支到本地 |
| git remote remove origin | 解除当前远程连接 |
| rm -f 文件名 | 删除文件,已追踪的文件可以恢复,未追踪的文件不可恢复 |
| git checkout -- 文件名 | 恢复已被删除的某个文件 |
10. 测试人员在公司里使用Git场景
场景1:
测试组长:小白,把你的git账号发我,我给你加进公司的git组织里。
你需要:将你注册gitee(码云)的手机号发给组长,让他邀请你进入公司gitee的组织。
场景2:
测试组长:小白,这是公司git远程仓库的地址,测试相关的资料在上面,你拉取下来先熟悉一下。
你需要:
① 在本地新建一个空文件夹
② 执行[git init] 命令,让这个文件夹成为你的[本地工作区]
③ 执行[git remote remove origin] 命令,先解除掉之前学习时的远程仓库
④ 执行[git remote add origin 公司远程git地址] 命令,连上公司的远程仓库
⑤ 执行[git pull origin master] 命令,拉取远程仓库的文件
场景3:
测试组长:小白,把今天写的测试计划上传到gitee上。
你需要:
① 将“测试计划”的文件修改成指定格式,如:XXX项目V121测试计划20230215.doc
② 将该测试计划放到已init过的[本地工作区]文件夹下
③ 执行[git add 文件名] 命令,将测试计划添加到[暂存区]
④ 执行[git commit -m '提交XXX项目V121测试计划' 文件名] 命令,将文件传到[仓库区]
⑤ 执行[git pull --rebase origin master] 命令,同步远程仓库的文件,避免文件冲突
⑥ 执行[git push -u origin master] 命令,将文件推送到远程仓库
场景4:
测试组长:小白,你把刚刚写的测试用例提交到TestCase分支上去。
你需要:
① 将“测试用例”的文件修改成指定格式,如:XXX项目V121测试用例20230215小白同学.doc
② 将该测试用例放到已init过的[本地工作区]文件夹下
③ 执行[git fetch origin TestCase] 命令,将远程的TestCase分支拉取到本地
④ 执行[git checkout TestCase] 命令,切换到TestCase分支下
⑤ 执行[git add 文件名] 命令,将测试计划添加到[暂存区]
⑥ 执行[git commit -m '提交XXX项目V121测试用例' 文件名] 命令,将文件传到[仓库区]
⑦ 执行[git pull --rebase origin master] 命令,同步远程仓库的文件,避免文件冲突
⑧ 执行[git push -u origin master] 命令,将文件推送到远程仓库
11. 常见报错
①. win7电脑执行git push推送命令时报错缺失文件,提示如下:

- 根据提示上指引,下载安装缺失的文件:.NETFramework,版本=v4.7.2
- 执行[git remote remove origin] 命令,解除当前远程连接
- 执行[git remote add origin 远程git地址] 命令,连接远程仓库
- 执行[git push -u origin master] 命令,推送文件
②. 执行git push推送命令时,报错403,如下图:

- 找到电脑控制面板→搜索“windows凭据”,删除与git相关的凭据,如下图:
>
- 执行[git remote remove origin] 命令,解除当前远程连接
- 执行[git remote add origin 远程git地址] 命令,连接远程仓库
- 执行[git push -u origin master] 命令,推送文件
③. 执行git push推送命令时,报错如下图:

- 执行[git pull --rebase origin master] 命令,拉取远程仓库文件,并取消之前推送动作
- 执行[git push -u origin master] 命令,推送文件