关于学习git时的一些疑惑与笔记

news2024/11/25 11:51:15

关于学习git时的一些疑惑与笔记

  • SSH相关问题
        • SSH是什么?
        • SSH有什么作用?
        • 如何在github配置SSH?
  • 分支
        • 什么是本地分支,远程分支?
        • main主分支与master主支?
        • 为什么要把master分支修改为main分支?
        • 什么时候用分支?
  • git与github的使用
        • 第一次创建仓库,并往仓库里面上传文件的命令行是什么?
        • 第二次及以后想往仓库里面上传文件的命令行是什么?
        • 从别的仓库切换过来,并且上传文件的命令行是什么?
  • git相关问题
        • origin是什么?
        • git是什么?
        • 什么是“版本控制”?
        • Git又为什么被冠以“分布式”的名头呢?
        • git解决了哪些问题?
        • git 的实现原理?
  • git常用命令:
        • 更改查看自己的用户名、邮箱:
        • 对仓库进行初始化:
        • 切换分支:
        • 查看缓存状态:
        • 将文件添加到缓存区:
        • 将文件添加到本地仓库commit:
        • 查看提交日志:
        • 让git来忽略不需要提交的文件:
        • 创建、查看、移动到、删除、合并分支:
        • 将github上的文件clone到本地:
        • 查看当前链接的远程git仓库的名字:
        • 将本地仓库push到远程仓库:
  • 疑惑:

SSH相关问题

SSH是什么?

SSH(Secure Shell,安全外壳)是一种网络安全协议。

SSH有什么作用?

通过加密和认证机制实现安全的访问和文件传输等业务。

如何在github配置SSH?

1.检查SSH keys是否存在
(https://www.jianshu.com/p/259773014e03)
在这里插入图片描述

2.生成新的ssh key
3.将ssh key添加到GitHub中

更详细的配置:
[如何在github配置SSH详细指南]

分支

什么是本地分支,远程分支?

本地分支对应的是本地仓库,远程分支对应的是远程仓库。

远程仓库指的是在github、gitee这些网站上的仓库,所有人都以远程仓库的文件作为最新版本。

本地的分支在本地的电脑的一个文件夹里,也就是每个人自己的工作区,每次clone,都是把最新版本的文件clone到这个git文件夹里。

这样,在自己的电脑上操作,就不会影响到远程仓库,而且每个人都可以负责不同的模块。

main主分支与master主支?

2020年10月1日后,Github会将所有新建的仓库的默认分支从master修改为main(由于),这就导致了一些旧仓库主分支是master,新仓库主分支是main的问题,分支名字不一样,main和master分支就不一样,尽管想表达的都是主分支的意思。

为什么要把master分支修改为main分支?

自2020年六月起,由于“Black Lives Matter”抗议活动持续发酵,而计算机行业中对master与slave这两个词的使用引起了部分人的反感。

在抗议声起、社会动荡加剧之时,更多的人认为这些包含历史文化因素的词汇已经过时,且应当被替换,于是多个开源项目开始采取行动替换冒犯性的术语,其中包括 PHPUnit 和 Curl、OpenZFS 等。

不仅仅是master与slave,还有许多相关的词汇如whitelist与blacklist都被计划更改为allowList与denyList。

正如 ZDNet 所说,继续使用这些带有种族色彩的词汇可能会延长种族歧视。一些学者在 2018 年的期刊上写道,“这些术语不仅反映了种族主义文化,而且还强化、合法化和延续了它。”

而 LinkedIn 的软件工程师 Gabriel Csapo 也在 Twitter 上表示,他也正在提出更新 Microsoft 内部库的请求,并删除任何带有种族歧视色彩的短语。

什么时候用分支?

假设我们要给当前主分支上的项目新增文件与功能,但是还不能确定是否需要,我们就可以在主分支的基础上创建一个新的分支,等待新分支文件一切都处理准备好了,再合并过来

git与github的使用

第一次创建仓库,并往仓库里面上传文件的命令行是什么?

这是在github上创建一个新的仓库,提供的引导代码,里面说明了第一次创建仓库,并往仓库里面上传文件的命令是什么。
在这里插入图片描述

需要注意的是:git remote add origin <SSH>这个链接各人不相同,改成自己的。

如何改SSH链接呢?
点击SSH,复制后面的链接
在这里插入图片描述

第二次及以后想往仓库里面上传文件的命令行是什么?

git push,不用在加-u origin main

从别的仓库切换过来,并且上传文件的命令行是什么?

1.首先git init
2.链接仓库git remote add origin <SSH>
3.创建新文件之后,输入git add .
4.git commit -m "名字"
5.git push -u origin main

git相关问题

origin是什么?

origin代表的是远程仓库的名字,本来远程仓库的链接很长一串,给它取个origin名字,每次上传的时候就不用敲很长一串的仓库链接了,只需要敲origin就可以代表仓库链接,进行上传

git是什么?

Git是一种分布式版本控制系统。

什么是“版本控制”?

版本控制这个说法多少有一点抽象。事实上,版本控制这件事儿我们一直在做,只是平时不这么称呼。举一个栗子,boss让你写一个策划案,你先完成了一稿,之后又有了一些新的想法,但是并不确定新的想法是否能得到boss的认可,于是你保存了一个初稿,之后在初稿的基础上另存了一个文件,做了部分修改完成了一个修改稿。OK,这时你的策划案就有了两个版本——初稿和修改稿。如果boss对修改稿不满意,你可以很轻易的把初稿拿出来交差。

在这个简单的过程中,你已经执行了一个简单的版本控制操作——把文档保存为初稿和修改稿的过程就是版本控制。

Git又为什么被冠以“分布式”的名头呢?

这里的“分布式”是相对于“集中式”来说的。把数据集中保存在服务器节点,所有的客户节点都从服务节点获取数据的版本控制系统叫做集中式版本控制系统,比如svn就是典型的集中式版本控制系统。中心版本仓库必须始终可用。如果中心仓库挂掉了,那么整个版本管理过程也将停止,程序员节点间无法进行协作,这就像集线器(hub)挂掉后,所有连接到hub上的主机节点间的网络也就断开无法相互通信一样。
在这里插入图片描述

与之相对,Git的数据不止保存在服务器上,同时也完整的保存在本地计算机上,所以我们称Git为分布式版本控制系统。

Git的这种特性带来许多便利,比如你可以在完全离线的情况下使用Git,随时随地提交项目更新,而且你不必为单点故障过分担心,即使服务器宕机或数据损毁,也可以用任何一个节点上的数据恢复项目,因为每一个开发节点都保存着完整的项目文件镜像。

git号称分布式版本管理系统,本质上是没有像subversion中那个所谓的“中心仓库”的。每个程序员都拥有一个本地git仓库,而不仅仅是一份代码拷贝,这个仓库就是一个独立的版本管理节点,它拥有程序员进行代码生产、版本管理、与其他程序员协作的全部信息。即便在一台没有网络连接的机器上,程序员也能利用该仓库完成代码生产和版本管理工作。在网络ready的情况下,任意两个git仓库之间可以进行点对点的协作,这种协作无需中间协调者(中心仓库)参与。
在这里插入图片描述

git解决了哪些问题?

我们可以为每一次变更提交版本更新并且备注更新的内容;
我们可以在项目的各个历史版本之间自如切换;
我们可以一目了然的比较出两个版本之间的差异;
我们可以从当前的修改中撤销一些操作;
我们可以自如的创建分支、合并分支;
我们可以和多人协作开发;
我们可以采取自由多样的开发模式。
Git解决了版本控制方面的很多问题,但最核心的是它很好的解决了版本状态存储(即文件变更过程存储)的问题。

git 的实现原理?

我们说到,Git很好的解决了版本状态记录的问题,在此基础上实现了版本切换、差异比较、分支管理、分布式协作等等炫酷功能。那么,这一节我们就先从最根本的讲起,看看Git是如何解决版本状态记录(即文件变更过程记录)问题的。

我们都有版本记录的经验,比如在文档撰写的关键点上保留一个备份,或在需要对文件进行修改的时候“另存”一次。这都是很好的习惯,也是版本状态记录的一种常用方式。事实上,Git采取了差不多的方式。

在我们向Git系统提交一个版本的时候,Git会把这个版本完整保存下来。这是不是和“另存”有异曲同工之妙呢?不同之处在于存储方式,在Git系统中一旦一个版本被提交,那么它就会被保存在“Git数据库”中。

看看git仓库内容的指令:ls
不显示开头是.的文件,只显示文件夹和开头不是.的文件

我们通过find .git命令查看新生成的空git仓库的结构,会发现其中有一个objects文件夹,这就是git数据库的存储位置。
在这里插入图片描述

git的基本流程是什么?
请添加图片描述
举个例子:
在我的家族祠堂里,存放着一本《菊花宝典》,家庭的每个成员,都会复制一本放在自己房间里,偷偷练习,这个复制成为clone,家族里,以祠堂里面的正本为准,其他的都是副本,有一天,我想到一个新的招式(新的功能),于是就把新的招式加入add到《菊花宝典》副本里,等新招式(新功能)彻底完成以后,就取个名字commit -m "名字"加入到副本里,为了让家族里的每个成员都学会这招式,于是我就把自己的副本拿到祠堂里进行对比,把新增的招式添加Push到正本里,在我更新《菊花宝典》以后,其他成员就可以用最新的《菊花宝典》来代替Pull自己的副本。

以上就是git的初步概念。

在这里插入图片描述

如果文件还在工作区里,那么文件就是Untracked状态,也可以称为Unstage。

已追踪称为stage

注意:Pull会直接更新到工作区,把手头上的东西都更新掉了,新文件覆盖旧文件,没有提醒地直接覆盖掉

所以我们可以先用fetch更新到本地版本库,再用diff对比区别,没问题再合并过来

git常用命令:

更改查看自己的用户名、邮箱:

1.git config --global user.name <用户名>
(1)、git config --global user.name <用户名>
作用:更改自己的用户名。
用户名有什么用?
就像网名,在commit提交的时候,团队伙伴能够看到是谁提交的,这个用户名和git登录没有什么关系。
例如:
git config --global user.name Xiaofei Li
意义:更改用户名为Xiaofei Li

(2)、git config --global user.name
作用:查看自己的用户名

(3)、git config --global user.email <邮箱>
作用:更改自己的邮箱
邮箱在git有什么意义?
方便团队成员联系你,如果代码有问题的话,可以在git里面看到你的邮箱
(4)、git config --global user.email
作用:查看自己的邮箱

对仓库进行初始化:

2.git init
作用:对仓库进行初始化,如果当前文件目录里面没有.git文件夹,那么就创建一个git文件夹,如果当前文件夹下面已经有git文件夹,那么就初始化里面内容。

切换分支:

3.git branch -M main
作用:初始化git之后,会默认显示master,由于前面讲过,master在2020年之后换成了main,所以自己要有意识地把master分支切换成main分支,如果git分支和仓库分支不对,上传文件会失败

查看缓存状态:

4.git status
作用:查看哪些文件夹在add缓存区,哪些是修改的新的,没加入add缓存区,红色就是Untrack未追踪文件,绿色就是stage追踪文件

将文件添加到缓存区:

5.git add .
(1)、git add .
作用:这个.代表全部的意思,是将当前文件夹里面所有Untrack文件夹添加到缓存区,变成stage追踪的文件

(2)、git add <文件名>
作用:单独将某个文件添加到缓存区

将文件添加到本地仓库commit:

6.git commit -m “评论”
(1)、git commit -m “评论”
作用:将缓存区的所有内容写个评论,上传到本地仓库中,这个评论一般是“完成了xx功能”

(2)、git commit -a -m “名字”
作用:add与commit一行命令完成两个操作,让更新的文件从工作区一下跳到本地版本库

(3)、git commit -am “名字”
作用:-a和-m其实是可以合在一起写的,add与commit一行命令完成两个操作,让更新的文件从工作区一下跳到本地版本库

查看提交日志:

7.git log
作用:查看前面提交过的所有版本、上传人的名字、邮箱、日期、评论等(谁瞎写代码,就能找到!)

进入log之后退出:轻轻按下q

让git来忽略不需要提交的文件:

8.touch .gitignore
作用:用touch创建.gitignore文件,在实际开放中,肯定会遇到不需要提交的文件,我们就需要让git来忽略这些文件,在.gitignore文件里面添加需要忽略的文件的的名字和后缀,就表示我们要忽略的文件,添加完成之后,即使这个要忽略的文件是Untrack状态也不会出现在git status里面了

创建、查看、移动到、删除、合并分支:

9.git branch <分支名>
(1)、git branch <分支名>
例如: git branch bad-girl
创建一个叫坏女孩的分支
作用:假设我们要给当前主分支上的项目新增文件与功能,但是还不能确定是否需要,我们就可以在主分支的基础上创建一个新的分支,等待新分支文件一切都处理准备好了,再合并过来,但是这个命令并不能立刻让我们移动到这个创建的新分支上

(2)、git branch
作用:查看分支,按q退出

(3)、git checkout bad-girl
作用:切换到bad-girl分支,而且文件夹里的文件是直接从master主支那里复制过来的

(4)、git branch -d <分支名称>
作用:对分支进行删除,但是这里会有一个提示,因为分支没有完全合并,问是否确定要删除,如果确定的话-d用-D

(5)、git branch -D <分支名称>
作用:对分支进行删除,很肯定,这次没有提示

(6)、git checkout -b temp
作用:创建一个新分支,并且立刻切换到新分支里面来,这行代码的意思是:创建一个名字叫temp的新分支,并且-b立刻切换到这个新分支上来

(7)、git merge temp
作用:把别的分支合并到当前所处的分支上,这里指的是,把temp分支上的内容合并到main分支上

在这里插入图片描述

Download ZIP方式与Clone方式有什么区别?
如果我们直接选择Download,就只会下载当前最新版本文件,而其中的历史版本和记录不会下载,也就是ZIP文件里面.git文件夹

将github上的文件clone到本地:

9.git clone <SSH链接>
作用:将github上的文件clone到本地

查看当前链接的远程git仓库的名字:

10.git remote -v
作用:查看当前链接的远程git仓库的名字,以后仓库多了,防止把文件传错仓库,每次换文件夹传文件之前查看一下是不是自己要传的仓库,origin代表的是远程仓库的名字,本来远程仓库的链接很长一串,给它取个origin名字,每次上传的时候就不用敲很长一串的仓库链接了,只需要敲origin就可以代表仓库链接,进行上传

在这里插入图片描述

将本地仓库push到远程仓库:

10.git push -u origin <分支名字,一般为main>
作用:如果是第一次push 就要写-u origin <分支名字>,如果是第二次及以后,只需要写git push,这是把本地仓库的文件上传到github远程仓库

疑惑:

HEAD->master又是什么?
我也不懂,好像版本回退的时候用的多,挖个坑,什么时候看懂了再回来讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java线程——常见方法

一、 常见方法 1.1 概述 ① start_vs_run&#xff1a;直接调用run方法并不会启动新的线程 import cn.itcast.n2.util.FileReader; import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test") public class Test {public static void main(String[] args) {Thread t…

【网络安全】Windows系统安全实验

第3模块 Windows操作系统安全部分 3.1 帐户和口令的安全设置 3.1.1 实验目的 本章实验的目的主要是熟悉Windows操作系统中帐户和口令的安全设置&#xff0c;掌握删除、禁用帐户的方法&#xff0c;了解并启用密码策略和用户锁定策略&#xff0c;体验查看“用户权限分配”、…

如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重点说一说如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序。相信大家在Windows环境下写C程序编译C程序运行C程序怎么弄都已经很清楚了&#xff0c;现在我们来看在Linux下如果来做&#xff…

Vue 在for循环中动态添加类名及style样式集合

介绍 在vue的 for 循环中&#xff0c;经常会使用到动态添加类名或者样式的情况&#xff0c;实现给当前的选中的 div 添加不同的样式。 动态添加类名 提示&#xff1a; 所有动态添加的类名&#xff0c;放在表达式里都需要添加引号&#xff0c;进行包裹。 通过 对象 的形式&a…

Git ---- Git 分支操作

Git ---- Git 分支操作1. 什么是分支2. 分支的好处3. 分支的操作1. 查看分支2. 创建分支3. 修改分支4. 切换分支5. 合并分支5. 产生冲突4. 创建分支和切换分支图解1. 什么是分支 在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创…

【已解决】安装cv2时Building wheel for opencv-python终端卡死

目录1 问题背景2 问题探索3 问题解决4 告别Bug1 问题背景 环境&#xff1a; Ubuntu20.04Python3.6 现象&#xff1a;终端输出类似下面的命令&#xff0c;并卡住不动 Building wheel for opencv-python (PEP 517) ... 2 问题探索 首先&#xff0c;OpenCV较旧的Python版本不需要…

什么是自动化运维?为什么选择Python做自动化运维?

“Python自动化运维”这个词&#xff0c;想必大家都听说过&#xff0c;但是很多人对它并不了解&#xff0c;也不知道是做什么的&#xff0c;那么你对Python自动化运维了解多少呢?跟着蛋糕往下看。 什么是Python自动化运维? 随着技术的进步、业务需求的快速增长&#xff0c;…

网友爆料奇葩leader:日报要精确到0.5小时,每晚检查!每周写周计划,评审ABCD等级,午休不许刷手机、看视频、玩游戏!...

这样的leader你能接受吗&#xff1f;一位网友吐槽&#xff1a;一个团队6个人&#xff0c;加上leader一共7个人。leader要求每天写日报&#xff0c;并且要精确到0.5小时&#xff0c;格式必须正确&#xff0c;每天晚上都看&#xff0c;下班后各种问进度。每周一要写周计划&#x…

IM即时通讯构建企业协同生态链

在当今互联网信息飞速发展的时代&#xff0c;随着企业对协同办公要求的提高&#xff0c;协同办公的定义提升到了智能化办公的范畴。大多企业都非常重视构建连接用户、员工和合作伙伴的生态平台&#xff0c;利用即时通讯软件解决企业内部的工作沟通、信息传递和知识共享等问题。…

Pytorch 网络结构的可视化

在构建网络的过程中&#xff0c;需要查看网络结构&#xff0c;以便于优化&#xff0c;使用Pytorch常用的可视化工具有 1.Hidden layer myNet U_Net() print(myNet)# ## 可视化卷积神经网络,MyConvnet是定义的神经网络结构 hl_graph hl.build_graph(myNet, torch.zeros([1, 3…

国产蓝牙耳机哪个好用?国产好用的蓝牙耳机推荐

现如今&#xff0c;国产蓝牙耳机越来越受到人们关注&#xff0c;国产蓝牙耳机近几年的发展愈发迅猛&#xff0c;配置上相对于非国产蓝牙耳机来说也毫不逊色。那么&#xff0c;国产蓝牙耳机哪个好用&#xff1f;下面&#xff0c;我来给大家推荐几款好用的蓝牙耳机&#xff0c;一…

电脑应用程序在c盘怎么转移到d盘?建议先收藏

电脑应用程序在c盘怎么转移到d盘&#xff1f;很多小伙伴第一反应就是直接剪切&#xff0c;这种方法对于普通文件来说很简单、也很方便&#xff0c;只需执行CtrlX就能办到&#xff0c;然而对于已安装的应用程序&#xff0c;这并不是明智的做法。因为直接剪切粘贴后&#xff0c;应…

【概念辨析】二维数组传参的集中可能性

一、二维数组传参竟然不是用二级指针进行接收&#xff1f; 今天进行再一次的二级指针学习时&#xff0c;发现了一条以前没怎么注意过的知识点&#xff1a;二维数组进行传参只能用二维数组&#xff08;不能省略列&#xff09;进行接收或者是数组指针。 问题复现代码如下&#xf…

ChatGPT 编写模式:如何高效地将思维框架赋予 AI ?

如何理解 Prompt &#xff1f;Prompt Enginneeringprompt 通常指的是一个输入的文本段落或短语&#xff0c;作为生成模型输出的起点或引导。prompt 可以是一个问题、一段文字描述、一段对话或任何形式的文本输入&#xff0c;模型会基于 prompt 所提供的上下文和语义信息&#x…

现有安全技术

现有的安全技术 防火墙技术 数据机密性技术 防火墙技术比较静态地保护网络支付涉及的客户端网络商家网络、金融专用网络等网络级的安全&#xff0c;数据传输过程中的安全性则需要数据机密性技术进一步给以保护 我们将源信息称为明文。为了保护明文&#xff0c;将其通过某种…

LMR23630APQDRRTQ1应用INA2181A1QDGSRQ1电流检测放大器电路图

LMR23630/LMR23630-Q1 SIMPLE SWITCHER降压转换器是易于使用的36V、3A同步降压稳压器。该器件的宽输入电压范围为 4.5V 至 36V&#xff0c;适用于调节从工业到汽车等各类应用中非稳压电源的电源调理。采用了峰值电流模式控制&#xff0c;以实现对环路补偿和逐周期电流限制的简单…

Docker 容器命令 和安装各种镜像环境

CentOS安装Docker 1.1.卸载&#xff08;可选&#xff09; 如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotat…

Qt-FFmpeg开发-保存视频流裸流(11)

Qt-FFmpeg开发-保存视频流裸流&#x1f4c0; 文章目录Qt-FFmpeg开发-保存视频流裸流&#x1f4c0;1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、FFmpeg保存裸流代码流程&#x1f4a1;4、主要代码&#x1f50d;5、完整源代码&#x1f4d1;更多精彩内容&#x1f449;个人内容…

【HTML】我的花儿我做主~ 指定花瓣的数量,生成花朵~

效果图 前言&#xff08;赛时灵感&#xff09; 在比赛开始前&#xff0c;就一直没有灵感&#xff0c;不知道参与哪个赛道。也还不知道用啥去做。 直到比赛开始&#xff0c;还是没想到。 最后在比赛快要结束的第五天三更半夜的时候&#xff1b; 突然想到&#xff0c;既然要浪漫&…

每日学术速递2.23

Subjects: Robotics 1.On discrete symmetries of robotics systems: A group-theoretic and data-driven analysis ​ 标题&#xff1a;关于机器人系统的离散对称性&#xff1a;群论和数据驱动分析 作者&#xff1a;Daniel Ordonez-Apraez, Mario Martin, Antonio Agudo, F…