# GitTeach
**Repository Path**: Lumiat/git-teach
## Basic Information
- **Project Name**: GitTeach
- **Description**: MakersHub的小伙伴们~这是今天的教学使用仓库
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-18
- **Last Updated**: 2025-01-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Git教学:极简版
## 省流版本
### 工作常用命令
```bash
git clone <库链接>
```
**解释:** 克隆远程仓库到本地,获取该仓库的完整副本。
```bash
git pull origin <分支>
```
**解释:** 拉取远程仓库指定分支的最新内容并与本地分支合并(在 Git 中,`origin` 是一个 **远程仓库的默认别名**,表示你本地 Git 仓库的默认远程仓库)
```bash
git checkout <分支>
```
**解释:** 切换到指定的本地分支或远程分支。
```bash
git add <文件名>
```
**解释:** 将指定的文件添加到暂存区,准备提交。
```bash
git commit -m "<注释>"
```
**解释:** 将暂存区的变更提交到本地仓库,并附上注释说明。
```bash
git push --set-upstream origin <分支>
```
**解释:** 将本地指定分支的内容推送到远程仓库,并将该分支与远程分支关联,简化后续的推送操作。
### 要求
- 每个文件做出更改后都要及时提交并配合精简的 commit message 说明你做了什么改动
- 只需要克隆 自己负责的工作分支即可
## 教学目的
为了帮助大家更好地理解本地仓库与远程仓库、分支之间的关系,我们将深入探讨如何通过 Git 管理本地和远程仓库的同步、分支间的切换与协作。通过本次活动,大家将能够掌握基本的 Git 操作,提升在团队项目中的协同开发能力。
## 教学分支图示
我们本次教学将设立4个分支,分别是:主分支 `master` ,开发分支 `dev` (位于master下层),管理员分支1 `admin1` (位于dev下层)和管理员分支2 `admin2` (位于dev下层)
```mermaid
flowchart TD
A["master(大主分支)"]---B["dev
(开发分支位于master下级)"]--- C["admin1(dev管理员1)"] & D["admin2(dev管理员2)"]
```
## GitGraph
> 什么是GitGraph?
**GitGraph** 是一个用于可视化 Git 仓库提交历史的工具,它通过图形化的方式展示 Git 仓库中的提交(commit)以及分支(branch)结构,帮助开发者更清晰地理解代码的演变过程。
教程将按照如下的GitGraph提交流进行教学
```mermaid
gitGraph
commit id: "step0"
branch dev
commit id: "add dev.txt"
commit id:"branch admin1 & admin2"
branch admin1
commit id: "add admin1.txt"
checkout dev
branch admin2
checkout dev
merge admin1
checkout admin2
commit id: "add admin2.txt"
checkout dev
merge admin2
checkout main
merge dev
```
*注释:main在我们的仓库中命名为master(主分支叫main是mermaid默认的,不能改)*
## 具体步骤
### Step 0:克隆教学仓库
#### Step 0-1:在目标文件夹打开 git 命令行
找到一个你希望放置克隆下来的仓库的文件夹,进入该文件夹后右键找到 **“Open Git Bash here”** 选项,点击后进入 git命令行

上面一行地址是你开启 git 命令行的文件夹

#### Step 0-2:执行克隆仓库命令
在命令行输入如下命令,克隆我们的教学仓库到本地(比如我这里在 E:\University\02_Work\MakersHub 打开的git命令行,便会在这个文件夹下克隆我们的仓库
```bash
git clone []
```
**解释:**
**``**:这是远程仓库的 URL 地址,可以是 HTTP(s)、SSH 或 Git 协议的 URL。
**``**:这是一个可选参数,表示本地存储克隆的目录。如果不指定,Git 会使用仓库名作为本地目录名

点击右侧橙色按钮 ”克隆 / 下载“ 以获取远程仓库的 URL 地址

点击后显示的页面如图所示,一般我们选用 **https**
### Step 1:在 本地新建分支 dev
#### Step 1-1:进入本地存储克隆的目录
完成仓库克隆后,进入到刚才本地存储克隆的目录(存放项目文件的 **文件夹**)
```bash
cd
```
:rotating_light: 一定要进入本地存储克隆的目录,不然会报错 ” xxx is not a git repository“
#### Step 1-2:新建分支 dev
在命令行输入如下指令,创建名为 `dev` 的分支
```bash
git checkout -b dev
```
输入该命令后,会在本地新建一个名为 `dev` 的分支,并且切换到 `dev` 分支上

可以看到后面有水绿色的 "(xxx)" ,里面显示的就是你所在分支的名字
*注释:我此处没有使用 git branch -b 是因为我已经创建过 `dev` 分支,只是要移动到它上面,而不是新建名为 `dev` 的分支。*
### Step 2:在本地dev分支上更改并提交到远端仓库
#### Step 2-1:在dev分支上作出改动
回到克隆仓库文件夹,右键新建一个 .txt 文件
#### Step 2-2:提交更改
回到 git 命令行,输入命令:
```bash
git add xxx.txt
```
`git add` 命令用于将文件的变更(新增、修改或删除)添加到暂存区,为下一次提交做准备。它不会直接修改版本历史,只是标记哪些文件要包括在下一次提交中。
继续,输入命令:
```bash
git commit -m ""
```
`git commit -m` 命令用于将暂存区的变更提交到本地 Git 仓库,并附带提交信息(通过 `-m` 参数指定)。这会创建一个新的提交记录,保存当前文件的状态和提交说明。
:rotating_light: **好习惯**是每个文件更改后都分别进行一次提交并配合恰当的提交信息阐述做出的改动
``` bash
git push set-upstream origin dev
```
`git push --set-upstream origin dev` 命令将本地的 `dev` 分支推送到远程仓库,并将该分支与远程仓库的 `dev` 分支建立关联,之后可以简化推送和拉取操作。
### Step 3:在本地新建分支 admin1和分支 admin2
同理,按照 Step1介绍的方法在位于 `dev` 分支下继续创建两个子分支 `admin1`
建立完 `admin1` 后,会进入到 `admin1` 分支下,我们应该回到 `dev` 分支下再创建 `admin2`
使用如下指令回到 `dev`:
```bash
git checkout dev
```
再按照 Step1 介绍的方法创建分支 `admin2`
### Step4:分别在本地分支 admin1和分支 admin2 作出改动并提交
按照 Step2 介绍的方法分别在两个admin分支做出改动,尝试切换自己位于的分支,可以看到文件夹中的内容会随着分支的变化而变化
回到远程仓库,也能看到不同分支下有不同的文件
### Step 5:本地分支合并
如果我们确定好 `admin1` 和 `admin2` 分别负责的内容都没有问题了,就可以一同合并到大的开发分支 `dev` 上,切换到 `dev` 分支,并在 git 命令行输入如下命令:
```bash
git merge admin1
```
可以观察到,属于 `admin1` 但是不属于 `dev` 分支的文件出现在了`dev` 分支的文件夹下,这就是所谓的**“合并”**
同样,继续合并 `admin2` 分支
```bash
git merge admin2
```
可以观察到,属于 `admin2` 但是不属于`dev`分支的文件也出现在了 `dev` 分支的文件夹下,两个子分支向总分支合并完成
:tada: 至此,想必大家已经对 git 分支与远程和本地的关系有了一定的了解!接下来让我们看看你们在工作时具体需要做什么叭
## 工作场景模拟
### 克隆自己负责的分支
在使用 `git clone ` 的方式克隆仓库时,并未指定具体要克隆哪一个分支,则会默认克隆 `master` 分支。但是在实际工作中,同学们不在 `master` 分支上工作,而是只需要负责一个特定的小分支,无需关心其他分支的工作情况。
因此,在实际工作场景下,同学们可输入如下指令,指定克隆自己负责的分支:
```bash
git clone -b
```
比如,我只想克隆 `git-practice` 仓库下的 `dev` 分支,我可以输入:
```bash
git clone -b dev https://gitee.com/Lumiat/git-practice.git
```
### Pull Request(人称 PR)
实际工作中,我们会将大家都分支设置为评审模式下的保护分支,即大家每次提交到远端仓库后会在仓库形成一个 **pull request** ,由仓库管理员检查通过后再行合并到远端仓库。这样确保每个功能或修复都在独立分支上进行,避免直接修改主分支,保证代码稳定性。通过PR,团队成员可以在合并前审查代码,发现潜在问题,优化实现,确保代码质量,提升协同效率,并减少错误。这样可以有效管理不同开发任务,提高项目的可维护性与可扩展性。
将更改提交到处于评审模式下保护分支,git 会返回如下图所示的信息,并且在远端仓库形成一个 pull request
