# git_learn **Repository Path**: GiaoOAO/git_learn ## Basic Information - **Project Name**: git_learn - **Description**: 看李立超老师的git课程所记下的笔记 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-10-08 - **Last Updated**: 2024-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Git, learn ## README # git 使用教程 # 目录 - [git 使用教程](#git-使用教程) - [目录](#目录) - [初始化和安装](#初始化和安装) - [初始化仓库和代码相关的操作](#初始化仓库和代码相关的操作) - [常见的命令](#常见的命令) - [git中的分支](#git中的分支) - [分支的一些操作](#分支的一些操作) - [分支的一些应用](#分支的一些应用) - [远程库的操作](#远程库的操作) - [标签的使用](#标签的使用) - [通过使用github来部署静态页面](#通过使用github来部署静态页面) - [通过使用.gitignore文件来是文件不被git所监控](#通过使用gitignore文件来是文件不被git所监控) - [docusaurus框架的使用](#docusaurus框架的使用) - [git进阶使用](#git进阶使用) - [规范化命名和进行版本提交](#规范化命名和进行版本提交) - [message的规范书写 就是提交记录的书写](#message的规范书写-就是提交记录的书写) - [撤销上一次操作的指令](#撤销上一次操作的指令) - [感谢](#感谢) - [贡献](#贡献) - [联系方式](#联系方式) ## 初始化和安装 * 安装 * linux `sudo apt install git ` * windows 通过在网站 [git官网](https://www.git.com)来下载 * 查看git版本信息 * windows `git -v` * linux `git --version` * 初始化git 相关的信息 * git中的有三个不同级别的设置 --system --global --local * 如果只是设置了--system级别的相关信息 如果未通过其他两种级别对文件或者系统来设置 默认的相关信息就是--system设置的相关信息 * 姓名: `git config --system user.name "wenyang"` * 邮箱:`git config --system user.email "3011223675@qq.com` 设置这两个信息方便来查看修改者的信息 便于管理 * 通过可以通过编辑.gitconfig直接修改相关的设置 * 通过`git config --list`可以查看相关的设置的信息 ## 初始化仓库和代码相关的操作 * 首先可以先创建一个空的一个文件夹 然后通过使用`git init`来初始化一个git仓库 会在文件夹中创建一个.git 文件夹 里面就是git的核心 * 然后可以设置git config的相关的内容 比如name 或者 email 等相关的信息 * 通过使用`git status`可以查看当前仓库的状态 * git中的文件的状态 * tracked 已跟踪 * 已修改modified:就是磁盘中的文件和git仓库中的文件不相同 * 未修改unmodeified: 就是磁盘中的文件和git仓库中的文件相同 * 已暂存staged: 就是代码已经修改保存但是没有放在git仓库里面 * untracked 未追踪 * 对于一个刚创建的一个文件 就是这种状态 需要通过使用git add filename来将文件添加到git仓库管理中 * 通过`git add filename`可以使得文件被git追踪管理 可以将文件从untracked状态转化为一个暂存状态 * 但是通过`git add filename`无法将文件入库 * 通过使用`git commit filename` 就是可以将文件存储到代码仓库里面 * 通过使用`git commit filename -m "提交代码的原因"` 来将tracked文件从暂存状态添加到代码仓库中 如果此时未对文件进行修改 就是可以文件状态就是未修改的状态 磁盘中的文件和git仓库中的文件相同 但是如果之后磁盘中的文件发生了修改 就是处于已修改状态 * 就是处于未修改状态的代码文件如果被修改之后处于一个已修改的状态 就是需要通过使用git add filename 来将修改的文件添加到暂存区中 然后再通过git commit filename -m "messgae"来将已修改文件转化为一个未修改的文件 * 通过使用git log就是可以看到修改的记录 * 通过使用`git add *` 就是可以将所git 未追踪的文件添加到暂存区中 就是将所有的untracked状态的文件都添加到暂存区中同时将所有的已修改modified的状态的文件添加到暂存区staged * 通过使用git commit -a -m "message"就是可以将所有的暂存区的文件都添加到未修改的状态 通过使用这个命令就是可以不用再执行git add *命令 但是这种方式只能够将所有的已修改文件都添加到未修改的状态 但是对于未跟踪的就是无法处理 ## 常见的命令 * restore 就是将一个已修改的文件修改为先前的状态 通过`git restore filename`就是可以将一个文件恢复到修改之前的状态 * restore本身就是重置的意思 所以git restore就是将文件重置到修改之前的未修改的状态 git restore * 就是将所有的文件都是重置到未修改的状态 * rm 就是remove的简写 也就是删除的意思 git rm 就是将一个文件给删除的意思 * 通过使用git rm 将文件给删除之后 删除的文件就是会出现在暂存区中 然后可以通过使用git commit filename -m "message"来将这个文件从暂存区中删除 * 通过使用git restore --staged 就是可以将文件从一个暂存区删除的状态转化为一个原来的状态 简单来说就是将文件从暂存的状态进行取消掉 之后通过使用git restore 就是可以完整的恢复命令 * 但是对于一个刚修改的一个文件 就是为了防止犯错误将添加的内容删去 就是无法删除 但是可以通过使用git rm -f 就是可以强制将文件删除 * 移动一个文件可以通过使用mv 就是move的缩写 通过使用git mv from_filename to_filename 同时可以将这个文件进行重命名 之后通过git commit to_filename -m "message"就是可以将变更进行上传 实现无修改状态 ## git中的分支 * 思想: 就是 通过创建分支来管理对同一版本的代码进行多种方式的发展和开发 * git 在存储文件的时候 代码的每一次提交 git当中都是会创建一个与之对应的一个节点 每一个节点的都是对应一个状态 就是节点会形成一个树状结构 树状结构就是意味着会出现分支 * 通过使用git log可以显示每一次提交的信息 * 主干分支就是master分支 通过使用`git branch` 就是可以查看当前的分支 通过使用git branch 就是可以设置一个新的branch 并且branch的姓名就是branch_name此时master分支和test分支都是同时指向一个节点 就是开始创建新分支所在的节点位置, 在git中, 可以创建多个分支, 每一个分支都是相互独立的, 彼此之间不会相互影响, 在一个分支上修改分支 不会影响到其他分支 ### 分支的一些操作 * 查看分支 通过使用`git branch`就是可以查看当前节点的所有的分支 * 创建分支 create branch 使用 git branch 就是可以在当前节点创建一个新的分支 * 删除分支 git branch -d 就是可以删除分支 * 跳转分支 git switch 就是可以跳转到特定的分支 * 创建分支并跳转分支 git switch -c 就是可以创建一个名为branch_name 的一个分支 然后之后就是以这个分支作为之后的节点的分支 #### 分支的一些应用 * 对于一个项目来说 如果要对已经可以运行的代码来进行修改不要通过直接通过当前节点所在的分支进行修改 而是应该通过git switch -c 创建一个新的分支 在这个分支上来进行修改 这样就是可以提高代码的效率和准确性和可迭代性 ## 远程库的操作 * 远程库的操作的命令的特点就是会跟上git remote * 如果直接使用git remote 就是直接输入`git remote` 得到的结果所有当前关联的远程库的名称 * 通过使用git remote -add 就是关联远程仓库 就是将url 对应的仓库与相关联 如果此时使用git remote命令 显示的就是会多一个的关联的远程库 就是相当于将一个变量通过name指向了url对应的代码仓库 之后使用这个仓库的时候就是不需要通过使用url来写了 就是相当于变量的赋值作用 * 通过使用`git remote remove `就是可以将关联的名为的远程库给删除 * 通过使用`git remote -v`就是可以的到更加详细的信息 比如库的地址等 通过push就是可以上传的地址 通过fetch就是可以下载的地址 * 通过使用`git push <远程库名> <分支名>`中的push 就是推送的意思 整个代码即时将当前代码推送到远程库中 如果在push之后加上一个-u就是表示将当前代码推送到远程库中 并与分支相关联 `git push -u <远程库名> <分支名>` 本地的分支名和远程的分支名不一定相同 所以可以通过使用`git push -u <远程库名> <本地仓库分支名>:<远程仓库分支名>`来将本地文件推送到远程仓库中 * 执行完上面的命令之后 就是可以直接通过使用git push直接将本地的仓库上传到远程仓库中了这是因为已经通过使用git push -u 将分支名称与远程仓库关联在一起了 之后就是默认将本地分支操作作用于远程仓库 * 但是每一次修改文件之后都是要通过使用`git commit -a -m "messgae"`来将文件状态进行更新 转化为已修改的状态 * 通过是一个`git clone `就是可以将远程仓库通过url下载到本地中 文件夹的名字就是name 如果没写name 就是默认就是远程仓库的名字 * 但是在多人开发的环境中 一个项目需要不断地进行迭代开发 那就避免不了需要通过远程仓库获取最新的一个代码和将自己的代码上传到到远程仓库中 * 获取远程仓库中的最新的代码 通过使用`git fetch [branch_name]`通过这种方式就是可以获取最新的代码 * 但是完成上述的操作之后 不能实现立竿见影的效果 这是因为还没有将代码进行和并 这是因为可能会出现代码冲突 需要自行进行取舍 * 通过使用 `git merge [remote_name]/[branch_name]` 就是将远程仓库分支与当前本地仓库分支进行合并 * 但是每一次修改文件之后都是要通过使用`git commit -a -m "messgae"`来将文件状态进行更新 转化为已修改的状态 之后才能完成状态的更新 * 也可以通过使用`git pull [remote_name] [branch_name]`来一次性完成上述的任务 实现下载和合并分支的功能 * 如果要将当前的本地仓库上传到一个远程仓库中的不同分支 或者是与当前分支不同分支名称的分支的时候 此时就是需要通过使用`git push -u [remote_repo_name] [current_branch_name]:[remote_branch_name]` 如果当前分支的名称和远程仓库的名称相同 此时就是可以直接省略:[remote_branch_name] ## 标签的使用 * 当头指针没有指向某一个分支的头部的时候 这种状态就是分离头指针状态 但是这些操作中不会出现任何分支上 所以注意不要在分离头指针的状态下来操作仓库 * 如何解决这个问题? 通过使用`git switch -c [new_branch_name] [节点的代码]` * 但是这种方式 如果在有大量的日志信息的时候 就是已经不适用了 由于查找过于麻烦 * 为了解决大量的commit导致的查找困难的问题 就是可以通过使用打标签的方式来快速实现查找 * 就是可以为提交记录来设置标签来实现快速跳转等操作 * 通过使用`git tag [tag_name]` 就是可以为当前的节点打上一个标签 标签的名字就是tag_name * 通过使用`git tag` 就是可以列出所有的标签的名称 * 同时可以使用tag来将节点的内容进行推送 `git push [remote_repo_name] [tag_naem]` * 通过使用`git tag -d 标签名`就是可以删除标签名 * 通过使用`git push [remote_repo_name] --delete 标签名称` # 删除远程标签 ## 通过使用github来部署静态页面 * **只能部署静态页面** * 在github中可以将自己的静态的页面部署到github之中 github可以为我们提供一个地址使得我们的页面形成一个真正的网站 可以提供给用户来进行访问 * 要求 * 首先要先创创建一个远程仓库 * 静态页面的分支必须叫做:gh-pages * 如果希望页面可以通过使用xxx.github.io访问 就是需要将名字配置称为xxx.github.io * 但是只能有一个来实现网站的仓库 否则会产生冲突 ## 通过使用.gitignore文件来是文件不被git所监控 * 网站开发中 一些常见的包和各种日志信息中其实是没有必要被git仓库所管理的 * 所以就是可以通过使用.gitignore文件来完成将这些无用的文件给忽略掉 然后就是可以更好的管理仓库中的内容 * 可以直接创建一个.gitignore文件之后 在文件中将要省略的文件夹和文件名写进去就是可以达到目的 ## docusaurus框架的使用 * [docusaurus中文网站链接](https://docusaurus.io/zh-CN/) * facebook推出的一个开源的静态的内容管理系统 通过是一个这个框架就是可以快速的搭建一个属于自己的静态网站 * 框架使用指南 * 首先在命令行窗口中 输入 `npx create-docusaurus@latest my-website classic`通过node.js创建一个新的一个项目 * 之后按照安装的要求一步一步的设置 就是可以完成网站的搭建 * 然后输入 `cd my-website`和`npx docusaurus start`就是可以在一个在线的一个教程网站 跟着进行操作就是可以简单的了解如何搭建网站了 * 如果要在一个编辑器中进行编辑 就是可以通过使用先按ctrl + c来终止网页 然后就是可以通过使用`code ./`来通过vscode来打开这个目录来进行编辑 * 进入vscode中之后 可以通过使用`yarn start`来启动项目 也可以通过使用`npm start`来启动项目 * 配置项目 * 首先来看一下文件的架构![文件架构图](./imgs/docusaurus_files.png) * docusaurus.config.js 项目的配置文件 可以设置网站的标题等信息 * 修改完成之后就是可以将网站推送到github上了 * 如果要将文件部署到自己的服务器上 就是可以通过使用`npm run build`或者`yarn build` 之后文件夹中会出现build文件夹 就是一个静态网站 * 上传代码的时候要注意两个地方 * yarn设置 `corepack enable`来设置 * 需要设置deploymentBranch:"gh-pages" * 还是要设置环境变量 GIT_USER:github的用户名 # git进阶使用 * [规范化命名和进行版本提交](#规范化命名和进行版本提交) * [github实战操作](#github实战操作) * [gitee实战操作](#gitee实战操作) ## 规范化命名和进行版本提交 * 在开发中 如果只是通过自己的感觉来进行版本提交的注释编写 就是会造成提交的信息混乱不易于查找等问题 会对之后项目的迭代造成很大的影响 所以规范化就是体现的非常重要 * git中提交命令就是 `git commit -m "message"` 或者 `git commit -a -m "message"`来进行文件的提交或者代码的提交 接下来我们就是针对message的规范书写来进行进一步的展开 ### message的规范书写 就是提交记录的书写 * 推荐格式就是 type(scope): subject * type 必须加上 就是 commit的类别 * feat 就是 feature的缩写 就是添加新功能的意思 * fix 就是修复bug的意思 * docs 就是文档改变的意思 * style 就是代码的格式改变的意思 * refactor 就是对某一个功能进行重构 * perf 就是进行性能的优化 * test 就是增加测试 * build 就是改变了build工具 比如将grunt换成了npm * revert 就是撤销了上一次的commit * chore 构建过程或者辅助工具的变动 * scope 可以选择性的加上 就是用来说明当前的更改影响的范围 比如数据层 控制层 视图层(针对于前端开发而言,不同的开发技术有着不同的作用域分层) 就是卸载小括号里面的 * subject 必须加上 就是对于当前的这次提交的一个简短的描述 **不超过50个字符** * [推荐插件](https://www.conventionalcommits.org/en/v1.0.0/) 也可以直接在vscode的拓展中来搜索插件 conventional commits这个插件 ### 撤销上一次操作的指令 * **撤销上一次的提交** # 感谢 * 感谢[bilibili李立超老师的git课程](https://www.bilibili.com/video/BV1124y117Dr?vd_source=1f665e669a981c4bb49b5f2b1ce411db) * 感谢[博客园中的关于git中的readme格式的书写](https://www.cnblogs.com/wj-1314/p/8547763.html) * 感谢所有为这个项目做出贡献的人 # 贡献

你的⭐对我来说就是开发的最大动力

# 联系方式 * 邮箱 📮 3011223675@qq.com