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

安装 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] Test
 1 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 +0800

    test

这里 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 +0800

    Update 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
* master
  origin

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

branch 创建分支

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

  backend-dev
* master
  origin
  newBranch1

checkout 切换分支

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

  backend-dev
  master
  origin
* 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.mfbz.cn/a/579721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xLua详解

目录 环境准备xLua导入 C#调用LuaLua解析器Lua文件加载重定向Lua解析管理器全局变量的获取全局函数的获取List和Dictionary映射table类映射table接口映射tableLuaTable映射table Lua调用C#准备工作Lua使用C#类Lua调用C#枚举Lua使用C# 数组 List 字典数组List字典 Lua使用C#扩展…

读天才与算法:人脑与AI的数学思维笔记12_数学的艺术

1. 数学 1.1. 灵光乍现&#xff0c;从来都是厚积薄发 1.1.1. 亨利庞加莱&#xff08;Henri Poincar&#xff09; 1.2. 数学的起源可以追溯到人类试图理解自己所生活的环境&#xff0c;预测接下来会发生什么&#xff0c;从而使我们更加适应环境&#xff0c;并选择对我们有利的…

Python-VBA函数之旅-map函数

目录 一、map函数的常见应用场景 二、map函数使用注意事项 三、如何用好map函数&#xff1f; 1、map函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、map函数的常见应用场景 ma…

Jammy@Jetson Orin - Tensorflow Keras Get Started: Concept

JammyJetson Orin - Tensorflow & Keras Get Started: Concept 1. 源由2. 模型2.1 推理流程2.1.1 获取图像2.1.2 算法识别2.1.3 判断决策 2.2 理想情况2.2.1 多因素输入2.2.2 理想识别概率 2.3 学习过程2.3.1 标记训练集2.3.2 损失函数2.3.3 训练网络2.3.4 渐进方法 3. 总…

使用Docker部署Jupyter Notebook并结合花生壳的内网穿透实现远程访问(详文)

一、前言 本文主要介绍如何利用宝塔面板中的Docker 3.9.3管理器,使用Docker本地部署Jupyter Notebook,并结合花生壳内网穿透工具实现任意浏览器公网远程访问Jupyter登录界面。 安装完成后在宝塔面板中图例 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言。…

Vue 组件单元测试深度探索:组件交互与状态变更 专业解析和实践

在Vue组件单元测试中&#xff0c;验证组件之间的交互&#xff08;如父组件与子组件、兄弟组件之间的通信&#xff09;以及状态变更的正确性对于保证整个应用的协调运作至关重要。本文详细介绍了父组件向子组件传递props、子组件向父组件发送事件、兄弟组件通过共享状态&#xf…

xfce4 panel 不能显示QQ,钉钉的状态图标

有一段时间不能显示了&#xff0c;之前刚装完系统的时候很长时间内都是好的&#xff0c;所以刚开始肯定是支持显示这些状态图标的。就是因为不能显示的原因&#xff0c;所以还装了lxQt桌面&#xff0c;这个桌面确实不错。不过还是有时会怀念xfce4&#xff0c;想看看能不能解决这…

Odoo:全球排名第一的免费开源PLM管理系统介绍

概述 利用开源智造OdooPLM产品生命周期管理应用&#xff0c;重塑创新 实现产品生命周期管理数字化&#xff0c;高效定义、开发、交付和管理创新的可持续产品&#xff0c;拥抱数字化供应链。 通过开源智造基于Odoo开源技术平台打造数字化的产品生命周期管理&#xff08;PLM&am…

Java UUID 类中的 getMostSignificantBits 和 leastSignificantBits 方法

getMostSignificantBits() 方法的一些介绍&#xff1a; getMostSignificantBits 这个方法主要用于在 UUID 中获取高64 位的有效位后返回 Long 数据类型。 在获取最高有效位时不会引发异常。 对应的还有一个 getLeastSignificantBits() 方法。 这个方式是从 UUID 中获取低 6…

阳光能源,创造永远:光模块的未来”:随着大数据、区块链、云计算和5G的发展,光模块成为满足不断增长的数据流量需求的关键技术

光模块的类型介绍&#xff1a; 为了适应不同的应用需求&#xff0c;不同参数和功能的光模块应运而生。光模块的分类方式及类型详见如下&#xff1a; &#x1f50e;封装形式&#x1f50d;&#xff1a; &#x1f4e3;&#x1f4e2;光模块按照封装形式来分有以下几种常见类型&a…

如何将本地Android studio项目上传到GitHub

操作步骤&#xff1a; 1、在GitHub上创建账户 2、在androd studio中添加上述创建的GitHub账号 3、在android studio上找到"share project on GitHub"&#xff0c;点击此选项上传当前项目到GitHub 上传成功后&#xff0c;会在GitHub上创建默认仓库repository 注&a…

LeetCode - LCR 008.长度最小的子数组

一. 题目链接 LeetCode - 209. 长度最小的子数组 二. 思路分析 由于此问题分析的对象是「⼀段连续的区间」&#xff0c;因此可以考虑「滑动窗口」的思想来解决这道题。 让滑动窗口满足&#xff1a;从 i 位置开始&#xff0c;窗口内所有元素的和小于target &#xff08;那么当…

图像处理到神经网络:线性代数的跨领域应用探索

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Python爬虫--Scrapy框架安装

Scrapy框架安装 &#xff0c; Scrapy 是 Python 领域专业的爬虫开发框架&#xff0c;已经完成爬虫程序的大部分通用工具 它使用了 Twisted 异步网络库来处理网络通讯。整体架构大致如下 第一步&#xff1a;挂小灰机或者将要安装的文件下载到本地 Scrapy 框架安装踩坑中 为什…

ubuntu的镜像源+bionic版本

首先第一步 查找和你自己ubuntu版本匹配的版本号 匹配代号如下 在终端输入lsb_release -a查看自己系统上的版本号 可以看到我这个版本号的代号是bionic。 每个版本的镜像文件都是有规律的。 bionic版本的源如下 # 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic ma…

前端用a标签实现静态资源文件(excel/word/pdf)下载

接上文实现的 前端实现将二进制文件流&#xff0c;并下载为excel文件后&#xff0c; 实际项目中一般都会有一个模版下载的功能&#xff0c;一般都由服务端提供一个下载接口&#xff0c;返回文件流或url地址&#xff0c;然后前端再处理成对应需要的类型的文件。 但是&#xff…

HTML5(1)

目录 一.HTML5(超文本&#xff08;链接&#xff09;标记&#xff08;标签<>&#xff09;语言) 1.开发环境&#xff08;写代码&#xff0c;看效果&#xff09; 2.vscode 使用 3.谷歌浏览器使用 4.标签语法 5.HTML基本骨架&#xff08;网页模板&#xff09; 6.标签的…

排序 “肆” 之归并排序

1. 归并排序 1.1 原理介绍 归并排序的基本原理是将一个未排序的数组分解为较小的子数组&#xff0c;然后递归地对这些子数组进行排序&#xff0c;最后再将排好序的子数组合并成一个有序数组。其核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列。 其主要步骤包…

【区块链】椭圆曲线数字签名算法(ECDSA)

本文主要参考&#xff1a; 一文读懂ECDSA算法如何保护数据 椭圆曲线数字签名算法 1. ECDSA算法简介 ECDSA 是 Elliptic Curve Digital Signature Algorithm 的简称&#xff0c;主要用于对数据&#xff08;比如一个文件&#xff09;创建数字签名&#xff0c;以便于你在不破坏它…

【Flutter】GetX

前言 状态管理 / 路由管理 / 依赖管理 这三部分之间存在联系 参考文章 建议看官网文章&#xff0c;很详细 &#xff0c;pub.dev搜索get pub.dev的文档 状态管理文章相关链接 状态管理 案例 实现一个计算器&#xff0c;运用GetX去管理它 构建界面 构建一个计算器界面 …
最新文章