快速了解 git 和 github 是什么,30 分钟速通版

devtools/2024/9/20 9:19:31/ 标签: 博客, 程序

安装 git

安装git和安装node、qq这种软件是一样的,到官网去下载安装就好了,记得选择正确的版本,mac和win需要下载的版本是不一样的。

  • git下载页面

配置 git

熟悉环境变量的小伙伴应该了解这一步的重要性,如果没有相关经验也不要紧,配置git可以暂时理解成类似qq的登录,这个登录也是有记住密码自动登录选项的。

使用这2个命令来配置你的身份(名称和邮箱)

  • git config --global user.name "woshishei"
  • git config --global user.email woshishei@example.com

这个命令在终端输入,这里需要了解一下终端如何使用:打开你的终端可以看见 C:\ 这样的路径,这就相当于,你打开了这个 C:\ 文件夹;

当你在终端输入指令 mkdir 新建文件夹,首先会在你这个路径下操作,也就是创建了一个文件夹,他的路径是 C:\新建文件夹,接下来git初始化仓库等等,也是在你终端所在路径操作的;

注意到上面的指令有一个 --global,这个指令是对git进行全局配置,他就会把你的名字和邮箱存在git自己管理的某个区域,如果不写 --global,那就是控制你当前所在文件夹下的git仓库的信息了。

第一个 git 仓库

  • 通过命令 git init 可以把当前文件夹变成一个仓库,不需要联网你就可以使用大部分的功能。
  • 或者找到别人的项目,通过另一个命令获取开源仓库代码,比如 git clone https://github.com/nesb01t/RPALite.git,这样就会把代码下载下来,同时也已经是一个 git 仓库。

这样操作获得的2种仓库,在本地都可以使用绝大部分功能,到这里你应该已经学会了如何下载别人的开源代码了。

git 基本功能 / 本地仓库

接下来介绍一个文件跟踪的概念,git 版本管理会追踪文件,通过追踪后续你进行的修改/删除/创建等操作,来定义不同的版本。

比如今天你写了version1.0,明天写了version1.2,git 就会发现,1.0到1.2进行了哪些更改?git 追踪的是这些文件的变动。

  • 跟踪文件: git add [name]
  • 取消跟踪: git rm [name]
  • 保留在目录但不被跟踪: git rm --cache [name]

add 修改跟踪文件并放入暂存区

随后,当你修改了 跟踪中 的文件,文件便会进入 已修改 状态;

此时再输入 git add [name],他就会变成 已暂存 状态,并自动放入 git 的暂存区。

如果你手滑了,也可以输入 git reset HEAD [name],就恢复 已修改 状态了。

此时我们注意到,一个 git 仓库里实际上有4种类型的文件:

  1. 未跟踪:和 git 仓库没有任何关系的文件
  2. 未修改:被跟踪的文件,但并没有参与修改
  3. 已修改:和上个版本不同的文件,也就是经过修改了
  4. 暂存:在暂存区,等待提交到新版本的文件

commit 提交暂存区,产生新版本

那么怎么提交暂存区的代码呢?使用命令 git commit 提交暂存,此时会有几个可能:

  • 如果你用的是vscode集成的git工具,他会让你直接在框里输入本次提交的信息
  • 如果你用的是git bash或者终端,会进入vim模式输入本次提交的信息,重点介绍一下如何用vi/vim来提交:
    1. i 键进入输入模式
    2. 输入本次提交的信息
    3. Esc 键,然后按 冒号-w-q
  • 你也可以用 git commit -m "提交的信息" 来避免上面2个可能的发生,对于初学者来说vi/vim可能会比较别扭,这里推荐直接使用 git commit -m "提交的信息"
PS E:\CloudShip> git commit -m "Test"
[backend-dev 97a49ef] Test1 file changed, 1 insertion(+)

如果你手滑了,输入 git reset HEAD~ --soft 就可以撤回这次提交

你可能会有疑问,这个reset是什么,head又是什么,暂时先记住前面的命令的功能,涉及到的内容后面会深入讲。

status 查看文件的修改和暂存状态

输入 git status 你就可以看到当前有哪些文件被修改过了:

  • 显示的红色文件代表:修改但没暂存
  • 显示的绿色文件代表:暂存但没提交
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   backend/controller/auth.js

diff 查看已修改而未进入暂存区的文件状态

上面的 diff 指令可以看哪些文件有变动; 而使用命令 git diff 可以看到 已修改/未进入暂存区 的文件里面具体到每一行的变动。

diff --git a/backend/controller/auth.js b/backend/controller/auth.js
index 0bb29d4..71e2806 100644
--- a/backend/controller/auth.js
+++ b/backend/controller/auth.js
@@ -36,6 +36,7 @@ class AuthController {ctx.status = 200;ctx.body = "creating new account";return;
+      return;}

log 查看过去的提交日志

输入命令 git log 可以查看历史的提交记录,比如:

commit d56ba11a294d229a0993facc2591a720faa04274 (HEAD -> backend-dev)
Author: nesb01t <nesb01t@hotmail.com>
Date:   Sat Apr 15 12:23:11 2023 +0800test

这里 commit 后面的 d56ba11a294d229a0993facc2591a720faa04274 是一个哈希值,是唯一的,我们可以通过这个哈希值找到我们本次的一个提交;

下面则包含了作者,日期,提交时输入的信息。

通过 git log --pretty=oneline 可以美化我们的输出到一行,还可以自定义格式等等,请自行查阅:

791fd226f01affae4c4e6224b8760dd5799622ac update List
43e319e0fcb412c19dccc0c832ac35352a75af3b Merge pull request #35 from Nesb01t/frontend-yjh
5911ab7f3b62dea34051803ef745c59db1fceb06 Merge pull request #34 from Nesb01t/backend-dev
bdd956e133fe0a5de6b92f374a99b78385cb5b53 Update 第一周
a5132f098fbae9a7d0888818b9eedbfc1b5d90b9 Merge pull request #33 from Nesb01t/frontend-yjh
2c983d840864dd099c49e54d029c38bf41bab01b Login and studentinfo

git 远程仓库

首先你需要准备一个 github / gitee 账号,这个 github / gitee 属于 代码仓库托管平台,git 的出现让程序员之间的协作变得更加容易,因为我们可以远程在同一段代码上进行不同的工作,最后再合并代码,这个 github / gitee 就是用来保存这坨代码的地方,而 git 是这个平台工作的核心机制。

打开 github 平台,点击 new repository 就可以新建一个仓库。

完成必要信息的填写后,注意选择 Public 就是开源,接下来你的代码将能被所有人看见,共享给 github 平台上的每一位用户。

创建成功以后,你的仓库就会获得一个专属的链接,比如 https://github.com/nesb01t/RPALite.git

remote 链接远程仓库

  • 输入 git remote 可以查看现在有哪些远程仓库链接。
  • 通过命令 git remote add [name] [link] 可以添加远程仓库链接,比如 git remote add origin https://github.com/nesb01t/RPALite.git
  • 通过命令 git remote rename [name] [newName] 可以更改远程仓库名字

push 推送代码到远程仓库

通过命令 git push [remoteName] [branchName] 可以将代码推送到远程仓库,比如 git push origin master,意思是推送到名为 origin 的仓库,推送的分支是 master,分支将会在后面进行更细的解释。

[可选] 利用 ssh 公私钥进行远程鉴权

当你连接远程仓库进行登录时,可能遇到 账号+密码 无法使用的情况,这时候可以使用更方便并且更安全的 ssh 登录,这里篇幅较多,暂时不展开讲,请感兴趣的小伙伴自行尝试 google 研究~

git 分支管理

分支的概念

每次我们进行 commit 提交活动,都会产生一个哈希值,类似这样 39a1492c8a 的值,代表了你某次提交的整个对象;

分支就是包含了这个哈希值的文件,也可以简单理解成 指向某个提交对象的指针

当我们初始化仓库时,也就新建了一个 master 分支; 第二次提交时,master 分支也就跟着一起进行向前的移动!

新分支的产生

当我们新建一个分支 newBranch,在这个新建的分支上进行修改,此时就会形成2个不同的分支,一个是master,另一个是newBranch

分支模型中,常见的流模型

一般有这么几个分支:

  • master - 主分支,比如1.0 -> 1.0.1 -> 1.1
  • hot fixes - 修复bug分支
  • release - 推动版本前进的运行分支
  • develop - 构成release的开发分支
  • feature - 构成develop的小特性更新分支

这几个分支从下往上一层层汇到一起,形成了分支模型,比如:

  • 从1.0作为起始点,分出了develop分支进行1.1版本的开发,同时分出了hot fixes进行1.0版本的bug修复,随后合并到master分支产生了1.0.1版本;
  • 从1.0分出的develop分支,里面产生了多个feature分支,合并到一起的develop分支最终汇总到一起形成一个release,待release成熟以后合并到master分支产生了1.1版本;

log 查看分支

commit ab829b0e37904181952f37cdddf9169b1697efae (HEAD -> master, origin/master)
Author: nesb01t <nesb01t@hotmail.com>
Date:   Mon Apr 17 17:24:06 2023 +0800Update 4月16更新

当你输入 git log,这个括号里就是我们的分支,会发现我们在 master 分支;

后面还有一个 origin/master 代表远程仓库上也是这个 master 分支;

这个 HEAD 的意思是我们现在在这个 master 分支上,而不是 origin/master 分支。

status 查看分支

输入 git status,可以看见:

On branch master
Your branch is up to date with 'origin/master'.

代表我们现在在 master 分支上,和远端的 origin/master 同步;

branch 查看分支

常用的是输入 git branch / git branch --list查看本地 有哪些分支:

  backend-dev
* masterorigin

其中这个带 星号 的就是我们当前所在的分支~

branch 创建分支

直接输入 git branch newBranch1,就 创建 了一个叫 newBranch1 的新分支;

  backend-dev
* masteroriginnewBranch1

checkout 切换分支

输入 git checkout newBranch1,就 切换 到了 newBranch1 分支; 此时输入 git branch 就可以看到现在切换成功了:

  backend-devmasterorigin
* newBranch1

另外输入 git checkout -b newBranch2,可以直接新建一个分支 并切换 到那个新建好的分支上~

merge 合并分支

我想让 masterFeature1 进行合并,怎么操作呢?

  1. 切换到 master 分支
  2. 输入 git merge Feature1

分支中的冲突:当2个分支同时修改了一个文件,即有可能产生冲突,一般提示为

Auto-merging <文件名>
CONFLICT (content): Merge conflict in test_file
Automatic merge failed; fix conflicts and then commit the result.

此时先输入 git status 确认哪里有冲突,手动解决冲突 之后 commit 即可

stash 暂存功能

当你的代码写到一半,需要回到 master 分支进行操作:此时你是无法直接切换的,因为你的工作目录中有被修改的文件!

你可以通过 commit 把现在写到一半的代码进行提交,但更好的方法是直接 stash 放置到暂存区

  1. 当你代码写到一半,此时输入 git checkout Feature1,会提示在切换分支之前,请你 commit 或者 stash 代码;
  2. 输入 git stash 之后即可暂存,此时你输入 git status 会发现目录是干净的,再 checkout 即可~
  3. 当你完成,再回来怎么恢复呢?输入 git stash apply 即可恢复之前编辑的状态。

如果你保存了好几次,即输入了好几次 git stash,你可以通过 git stash list 来回看之前提交的几次 stash 暂存区代码。

git 撤销操作

很多时候会遇到需要撤销操作,见下~

reset 回弹

  • git reset head~ 文件已修改,但不再是暂存状态了
  • git reset head~ --soft 暂存状态仍存在
  • git reset head~ --hard 直接放弃数据,不推荐使用

head 和 波浪线 ~

在指令 git reset head~ 中,head 指的是当前最新的一次提交,head~ 指的是 head 上一次的提交,同理可以使用 head~2 代表上上次的提交。

rebase 变基

比如说我开发了A分支,同事开发了B分支,我们可以使用合并,也可以使用变基~

  1. 切换到 B 分支
  2. 输入 git rebase A
  3. 此时就会把 B 分支的修改移动到 A 上

远程慎用,当你的同事在你上面盖第二层楼,你变基,等同事盖完有可能发现你这个第一层没了。

总结

多做项目上手操作,无他唯手熟尔

本文由博客一文多发平台 OpenWrite 发布!


http://www.ppmy.cn/devtools/28893.html

相关文章

vercel是cicd吗

Vercel本身并不是CI/CD&#xff0c;但它内置了CI/CD的功能。Vercel是一个用于静态站点和无服务器函数的云平台&#xff0c;它支持从各种编程语言和框架构建和部署应用程序&#xff0c;并提供自动SSL、无服务器函数和持续部署等功能。通过Vercel&#xff0c;开发者可以轻松地部署…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;3&#xff09; 一、hystrix&#xff1a;通过 Actuator 获取 hystrix 的监控数据 1、Hystrix 的监控平台介绍&#xff1a; 1&#xff09;Hystrix 除了实现容错功能&#xff0c;Hystrix 还…

【重磅开源】MapleBoot项目启动部署

基于SpringBootVue3开发的轻量级快速开发脚手架 &#x1f341;项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒&#xff0c;终有春日&#xff…

版本控制系统-Git

目录 1. Git简介 2. 下载及安装 3.命令行操做 3.1全局设置 3.2初始化仓库 3.3提交代码 3.4查看提交历史 3.5推送代码 3.6拉取合并代码 3.7克隆仓库 3.8. 配置忽略文件 3.9. 凭据管理 4. GUI工具操作 4.1. 全局设置 4.2. 初始化仓库 4.3. 提交代码 输入提交日志…

程序员缓解工作压力的小窍门(上中下三策)

文章目录 一、前文二、下策三、中策四、上策 程序员的工作性质常常伴随着高度的精神集中和持续的创新压力。为了保持高效和创新&#xff0c;同时维护个人健康和工作热情&#xff0c;你会采用什么方法来缓解工作压力呢&#xff1f;快来和分享一下你的经验吧~ 一、前文 首先&am…

Transformer总结(一):基础介绍(注意力机制、自注意力机制、位置编码、多头注意力机制)

文章目录 一.注意力机制1.背景介绍2.Additive attenion&#xff08;加型注意力机制&#xff09;3.dot-product attention&#xff08;点积型注意力机制&#xff09; 二.自注意力机制三.位置编码四.多头注意力机制 一.注意力机制 1.背景介绍 早在60年代就有了非参数的注意力机…

2024最新华为OD机试试题库全 -【孙悟空吃蟠桃】- C卷

1. 🌈题目详情 1.1 ⚠️题目 孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树,每颗树上都有桃子,守卫将在 H 小时后回来。 孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉 K 个,如果树上的桃子少于 K 个,则全部…

中间件之异步通讯组件RabbitMQ入门

一、概述 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后&#xff0c;才能继续执行后面的业务。也就是说调用者在调用…

ChatGPT 记忆功能上线 能记住你和GPT互动的所有内容

你和ChatGPT的互动从今天开始变得更加智能&#xff01;ChatGPT现在可以记住你的偏好和对话细节&#xff0c;为你提供更加相关的回应。和它聊天&#xff0c;你可以教它记住新的东西&#xff0c;例如&#xff1a;“记住我是素食主义者&#xff0c;当你推荐食谱时。”想了解ChatGP…

PyMJCF 使用教程

系列文章目录 前言 重要&#xff1a;如果您在使用 PyMJCF 时发现自己卡住了&#xff0c;请查看本页上的各个重要方框和底部的常见问题部分&#xff0c;看看其中是否有相关内容。 该库为 MuJoCo 基于 XML 的 MJCF 物理建模语言提供了一个 Python 对象模型。该库的目标是让用户能…

Rust特征

一、Rust特征是什么、怎么用 1、Rust特征是什么 我认为Rust特征和Java中的接口类似&#xff0c;但是扩展了语义 特征定义了一组可以被共享的行为&#xff0c;只要实现了特征&#xff0c;你就能使用这组行为 2、Rust特征怎么使用 &#xff08;1&#xff09;特征定义 pub tra…

javascrip对象如何区分属性和方法

在JavaScript中&#xff0c;对象是由属性和方法构成的。属性是对象的特征或状态&#xff0c;而方法是对象能够执行的动作。 属性的特点&#xff1a; 属性是对象的成员&#xff0c;用来描述对象的状态或特征。属性可以是基本数据类型&#xff08;如字符串、数字、布尔值等&…

第一阶段--Day2--信息安全法律法规、网络安全相关标准

目录 1. 针对信息安全的规定 2. 网络安全相关标准 1. 针对信息安全的规定 《中华人民共和国计算机信息系统安全保护条例》1994年2月18日颁布并实施 中华人民共和国计算机信息系统安全保护条例__增刊20111国务院公报_中国政府网 《中华人民共和国国际联网安全保护管理…

介绍一下传统vgg,gan- based,diffusion-based风格迁移路线的优缺点

一、VGG风格迁移是一种基于深度学习的图像风格迁移技术。 其核心在于使用卷积神经网络&#xff08;CNN&#xff09;&#xff0c;特别是VGG网络&#xff0c;来提取和融合源图像的内容特征与目标图像的风格特征。在VGG风格迁移中&#xff0c;通常会使用预训练的VGG网络来提取特征…

Hive EXPLAIN 执行计划解析

Hive EXPLAIN 执行计划解析 EXPLAIN 语法 Hive提供了一个EXPLAIN命令&#xff0c;用于显示查询的执行计划。该语句的语法如下&#xff1a; EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query 在EXPLAIN语句中使用EXTENDED会提供关于计…

axios.get请求 重复键问题??

封装的接口方法&#xff1a; 数据&#xff1a; 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组&#xff0c;但是通常 HTTP 请求的查询参数不支持使用相同的键&#xff08;key&#xff09;名多次。如…

【简单讲解下FastStone Capture】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

羊大师分解,羊奶滋养孩子成长的秘密武器

羊大师分解&#xff0c;羊奶滋养孩子成长的秘密武器 羊奶作为孩子成长的秘密武器&#xff0c;确实在滋养和促进孩子健康方面发挥着重要作用。以下是一些羊奶滋养孩子成长的秘密&#xff1a; 营养成分丰富&#xff1a;羊奶是营养最全面丰富的食品之一&#xff0c;含有较牛奶更…

Linux yum/环境变量/服务/进程/hash/bash/防火墙命令

常见的Yum命令命令作用yum repolist all列出所有仓库yum list all列出仓库中所有软件包yum info 软件包名称查看软件包信息yum install 软件包名称安装软件包yum reinstall 软件包名称重新安装软件包yum update 软件包名称升级软件包yum remove 软件包名称移除软件包yum clean …

webscoket+webrtc实现语音通话

1.项目方案 前端采用webrtc创建音频上下文&#xff0c;后创建音频源输入和音频处理器&#xff0c;连接音频输入与处理器&#xff0c;处理器再连接到音频输出&#xff08;扬声器&#xff09;&#xff0c;再通过事件获取音频数据&#xff0c;把音频数据转换成字节数据通过webscok…