git笔记

news2025/1/16 17:48:11

coderwhy听课笔记

什么是集中式 分布式

集中式是将整个仓库放到服务器;分布式是每台电脑上都有对应的仓库,可以在本地提交,之后把本地的仓库同步到服务器的仓库里

git安装

除了能使用git命令,还安装了git bash,git GUI
git bash在CMD的基础上增加了一些新的命令与功能,可以执行linux命令,因此其实完全可以用git bash替代CMD

git GUI提供了图形化界面来运行git命令

如果经常使用vscode的话,可以在vscode配置一个git bash终端

git操作

git初始化和clone远程仓库

获取git仓库

  • 新项目
    • git init
  • 已存在的项目
    • git clone

克隆的如果是私有的仓库,需要输入用户名密码 或者配置ssh key才能成功

git两种状态

未跟踪状态,已跟踪状态
默认情况下,Git仓库下的文件没有添加到Git仓库管理中,需要通过add命令来操作

已跟踪状态

  • staged: 暂缓(存)区/索引区(Index)中的文件状态 (git add以后,还没有添加到某一次提交里面 git log无法查看)并没有和任何提交联系在一起
  • unmodified: commit命令,可以将staged中文件提交到git仓库
  • modified: 修改了某个文件后,处于modified状态 ,需要重新添加到暂缓区里面

在这里插入图片描述
绿色方框这里都是有关本地的操作
在这里插入图片描述
上部分写了几种状态,那如果查看所处的状态呢 – git status
在这里插入图片描述
add以后 : changes可以被提交, 可以使用git rm --cached 去把文件在暂缓区里面移除掉
在这里插入图片描述
git rm --cached 相当于这个

add以后可以提交了

在这里插入图片描述

git忽略文件

有些文件不希望git来跟踪和管理,通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等;
在vue脚手架生成的文件,他长这个样子
在这里插入图片描述

git校验和(commit id) 日志和版本回退

每次提交里面都有这样一串东西, 这个是git校验和 是标识提交的标识符 ,是基于git中文件的内容或目录结构计算出来的
在这里插入图片描述
git log 可以查看commit id,作者,日期
如果想更美观一点 可以用 git log --pretty=oneline

在这里插入图片描述

git log --pretty=oneline --graph (多分支的时候有用)

在这里插入图片描述

版本回退 git reset
如果说当前head有个重大bug 想回退到以前的版本
可以通过HEAD来改变git目前的版本指向
在这里插入图片描述

git reflog 对回退版本的操作也做了记录

git远程仓库

可以使用第三方的Git服务器 如github, gitee, gitlab等 或在自己服务器搭建一个Git服务
gitlab不好注册,访问速度慢

很多公司都是用自己的服务器搭建 通过gitlab软件而不是gitlab服务器,可以在云服务器里面使用gitlab的功能

在这里插入图片描述
用gitlab搭的长这样
在这里插入图片描述

远程仓库创建和验证方式

gitee上创建一个私有远程仓库,需要把他克隆下来

有两个地址可供选择,一个https, 一个ssh
尝试https, 是需要输入用户名密码验证身份的,有权限才可以克隆 git credential
尝试ssh, 需要ssh密钥

http

因为http协议是无状态的连接,所以每个连接都需要用户名和密码,每次都要输入用户名密码,开发效率很低, git有一个凭证系统专门处理,

git credential选项
在这里插入图片描述
选项五可以用这个查看是否有开启 没有开启的话,每次都输入一遍用户名密码 非常麻烦
在这里插入图片描述

ssh密钥


在这里插入图片描述

在电脑上输入一串命令,生成一对公钥和私钥, 需要将公钥放到服务器
如果是通过ssh连接服务器的,那会自动读取私钥,把私钥携带到服务器,服务器拿到私钥和公钥进行匹配来进行验证,不需要用户名密码

三个回车后
在这里插入图片描述
去第一次回车时,提示保存的位置 ,这个文件里面就是公钥
在这里插入图片描述
拿到里面的东西,添加到gitee里面的 安全设置->ssh公钥
添加完之后,使用git clone ssh地址 就能成功了

远程仓库的添加和同步

克隆下来以后,执行git remote -v
在这里插入图片描述
如果本地已经有代码了,可以添加远程服务器, git remote add <shortname>(如origin) <url>
之后 git pull
在这里插入图片描述
在这里插入图片描述

其实最主要的还是add commit pull push

在这里插入图片描述

fetch和merge遇到的问题处理

问题一: 跟踪问题
问题二: merge问题
(如果本身是git clone下来的代码 就不会出现这个问题, git init创建会出现这个问题)

在某个文件夹里面已经有东西了,还没有交给git仓库来管理,可以通过git init来初始化一个本地仓库, 之后add commit 这样就添加到本地的仓库里了

这时候想和远程仓库建立连接
在这里插入图片描述
这时候执行git pull 拉取远程仓库的代码
报错了
在这里插入图片描述

虽然本地仓库和远程仓库通过git remote add命令建立了连接,但是不知道本地的哪个分支和远程的哪个分支建立连接,

可以使用git pull origin(哪一个远程仓库,因为刚刚add了origin) master(分支名)
每次都这样的话 有点麻烦 可以给当前本地的master分支设置一个上游分支,上游分支就是服务器里面的某一个分支,可以让他们两个之间建立关系, 上游分支又叫跟踪分支, 设置了上游分支,之后再进行git pull的时候,就可以自动从上游分支获取,不需要每次都指定origin master这些东西了

上游分支的设定:
在这里插入图片描述
执行完这个, 下次直接git pull就可以
在这里插入图片描述

还有一种做法 git branch --track dev origin/master

执行git pull的时候,还是会报错
在这里插入图片描述
git pull的本质是git fetch + git merge
git fetch是没有问题的,问题出在git merge
git merge的作用是 让当前的master分支去和另外一个分支进行合并
git merge后面不跟东西的情况下,默认合并的是上游分支 也可以git merge origin/master直接指定, 但直接指定也会报这个错误
在这里插入图片描述

来梳理一下,现在是想将本地的master分支和origin/master做一个合并,将远程代码合并到项目里面去,在过去git merge是可以实现的,虽然两个分支没有共同的基础(base),本地的仓库提交历史和服务器提交历史没有相交的地方

现在如果想让两个没有祖先的分支进行合并,需要用git merge --allow-unrelated-histories, 这样就算没有共同祖先也可以进行合并
在这里插入图片描述
之后git push 可以将本地的master 放到远程的master里
在这里插入图片描述

远程仓库命令

在这里插入图片描述
在这里插入图片描述

push操作

在这里插入图片描述
把当前的master分支推送到远程的main分支

那如果写这个命令呢
在这里插入图片描述
这个意思是将当前的master分支推送到远程的master分支 git push origin master:master

那只执行git push呢, 想让他推送到上游分支,报错
在这里插入图片描述这个和git配置有关系,可以配置git push的默认行为
默认的是这个
在这里插入图片描述
但是我想找的其实是上游的分支 那就可以这样配置
在这里插入图片描述
另外一个模式(当前分支:dev): 找相同的远程分支,找不到就新建一个远程的分支, 而simple模式,找不到会报错
在这里插入图片描述

tag使用

某一次提交把阶段性的任务完成了,可以给提交打一个标签,方便之后做查找,做版本回退,一般项目比较重要的版本都会打一个tag

对某一个commit打tag
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

git的提交对象和底层原理

通过commit id可以找到一个文件 这个文件里面记录了tree, 通过tree找到一个文件,这个文件里面包含了依赖文件,
在这里插入图片描述

git init之后,会产生.git文件夹

  1. 首先看里面的objects文件夹,git add .会把东西放到暂缓区里面,然后就会多出两个东西
    在这里插入图片描述
    再点开
    在这里插入图片描述
    里面到底放的什么?
    git cat-file -t 00d2 (d2为文件前两位 会自动去objects文件夹下面找)
    打印blob 为二进制的文件

git cat-file -p 00d2
打印文件内的内容
所以说这个时候,其实文件已经被存起来了

  1. git commit
    这时候多出两个文件
    在这里插入图片描述

看一下这两个文件里面有什么
在这里插入图片描述
这个eb5c其实就是校验和 也就是commit id
在这里插入图片描述
所以每一次提交 就是通过sha1和 找到5c2bxxx这个文件,
可以看到这个文件里面,还有一个叫tree, 对应465815xxxx

465815xx里面存的这个
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果想看master文件里面的内容 可以直接把文件拖到vscode
在这里插入图片描述

创建和切换多个分支和本质

现在有四次提交, 每次提交都会有一个commit对象, 四个提交会通过parent联系在一起,

master其实就是一个文件,这个文件指向最后一次提交,master分支是默认情况下git帮我们创建的分支,除了master分支,也可以自己创建更多的分支
在这里插入图片描述
在这里插入图片描述
git checkout / git switch 可以切换分支 git checkout -b dev 可以创建并切换过去

切换完之后
在这里插入图片描述
head指向谁 现在就处在哪个分支

现在切回到master, 之后修改内容 git add commit之后,会发生什么变化?

在这里插入图片描述
这个时候再checkout testing
head就会指向testing了
在这里插入图片描述
再testing分支下 修改代码,进行add, commit
在这里插入图片描述
这样就变成两条开发流程了

在这里插入图片描述

为什么使用分支

比如tag v1.0.0 已经发布上线了, 团队继续往后写代码,准备发布第二个版本的过程中,忽然发现第一个版本有bug, 需要某个人去修复bug, 就可以回到tag v1.0.0里面,在这个版本里面创建一个分支,叫hotfix

在这里插入图片描述
改完了 但是现在444 555都是有bug的 所以需要把hotfix分支的东西合并到master分支里面

演示一下操作
开发到333打一个tag , 继续向后开发 开发到555
这时候反馈333上线后有bug, 现在要且回到333版本里面
git checkout -b hotfix 创建分支 修复完bug以后 再commit提交
在这里插入图片描述
修复完了 打上一个新的tag
在这里插入图片描述

那就可以再打包上线了

还要且回到master分支,master分支这时候还是有bug,要修复一下,得将hotfix里面修复好的代码合并到master分支里面,这就叫分支的合并
执行git merge hotfix

在这里插入图片描述
出现了冲突,代码就长这个样子
在这里插入图片描述
<<后面的head相当于master
<<< 到== 中的都是master分支的代码
===到>>>中的都是hotfix分支的代码

可以手动解决 把《《 == 》》都删掉
vscode就更加方便了 他会自动识别符号, 上面有几个按钮
在这里插入图片描述

然后add commit
在这里插入图片描述
这样这个"合并hotfix"的commit有两个parent
在这里插入图片描述
图结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
移除分支其实是把指针移除掉,提交并没有移除

提交历史还是长这样
在这里插入图片描述

git工作流

有重要版本了,就切到master里面,合并dev分支

topic是什么? 新的主题。 比如正在开发网易云音乐项目, 突然我想加入视频播放的功能,有可能最终能实现 也可能实现不出来, 如果在dev开发,到最后发现做不出来,那我提交那么多东西根本没有意义,最后还得做回退。
所以再公司,可能就会有个topic分支,专门开发主题模块就行了,开发的好,就合并到dev里, 如果开发不出来,直接删掉分支就行了,不需要做额外的操作。
在这里插入图片描述
在这里插入图片描述
准备发布了 就创建release分支,测试测试的就是release的版本,测试测出来bug,就去修复这个bug,把修复好的版本 合到dev里面,还要合到master打上tag

git的远程分支

本地有master分支 远程有main分支
git remote add orgin xxxx地址
之后git fetch 把远程代码拉下来
这时候本地有两个分支 一个master, 一个origin/main
想让master和origin/main建立连接
git branch --set-upstream-to=origin/main 建立master的上游分支, 到现在为止,其实本地文件是没有变化的,
他们两个是没有共同祖先的 这个时候git merge origin/main 或者直接git merge 默认合并上游分支
会报错因为没有共同祖先 可以执行git merge --alow-unrelated-histories
git push 报错, 因为默认是simple模式 设置 git config push.default upstream
之后就可以git push了

因为本地的分支叫master,远程分支叫main, 把master push到main总感觉有点别扭,所以可以git checkout --track origin/main 会自动创建一个新的分支main 并跟踪origin/main分支, 名字一致了就不需要该push的simple模式了, 最好不要让名字不一样不然就很麻烦

本地新增一个分支 dev, 远程没有, 想让组员也在dev分支开发,是需要把分支推送到远程的,
直接git push (相当于git push origin dev:dev)报错
在这里插入图片描述
可以git push origin dev 这时候远程仓库也有dev分支了
也得设置上游分支
在这里插入图片描述


在这里插入图片描述
再设置上游分支就可以了


对于组员
在这里插入图片描述
会检查本地有没有develop分支,没有就会去远程仓库找有没有分支
再git branch
在这里插入图片描述
git checkout dev 相当于做了三部操作

  1. 检查远程有没有dev分支
  2. 创建本地的dev分支
  3. 让dev分支跟踪origin/dev
    这样可以直接push 不用做其他配置

在这里插入图片描述

删除本地分支和远程分支命令不一样

git rebase , merge区别

假如目前有两个分支 feature, master
工作流(hotfix改成master)
在这里插入图片描述
现在做了merge合并以后
在这里插入图片描述
在这里插入图片描述

历史记录已经不是线性了

希望变成这种效果
在这里插入图片描述
这就要rebase来完成

首先要切换到feature分支里面, 不要再master分支操作!
feature里面执行git rebase master
原来bbb是feature的base, 现在是要用master指向的commit对象作为feature的base
在这里插入图片描述
在这里插入图片描述

这样master滞后了 可以切到master,git merge feature, master也指向最新的commit对象
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其他

以前喜欢把主分支命名为master 现在逐渐改成main了 说是master有主人的意思 有种族歧视?

环境变量: 分为系统环境变量和用户环境变量
多用户概念:现代操作系统是多用户的,一个操作系统可以创建多个用户,如果有两个用户,那我配置的环境变量到底是给哪个用户配的呢,如果在系统环境变量里面配置,那就是给所有用户配置

git add . + git commit -m ‘’ === git commit -a -m ‘’

git凭证
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

mysql数据库有关教程

我们打开Navicat 我使用的是16版本的,我们选择连接,我们新建连接 这里会有菜单栏目,比如说常规,高级,数据,SSL,SSH HTTP 其他的我们先不看,后期有机会我会解释的,先看常规 连接名字,就是你可以自己命名一个名字,也可以不写,比如说连接名字 studentdemo1 主机默认是localhos…

NetInside网络攻击分析帮您轻松发现可疑主机

分析概要 分析概要从以下三点做介绍。 分析内容 NetInside网络流量分析设备采集的流量。 分析时间 报告分析时间范围为&#xff1a;2020-09-28 07:58:00-11:58:00&#xff0c;时长共计3小时。 分析目的 本报告主要分析目的&#xff1a;查找和定位存在可疑现象的主机、查…

SHELL脚本学习 --- 第二天作业

SHELL脚本学习 — 第二天作业 思路&#xff1a; 这四道题都有条件判断的过程&#xff0c;可以使用if&#xff0c;也可以使用与运算。 linux的shell脚本中&#xff0c;与运算前一个命令执行成功&#xff0c;则执行后一个命令&#xff0c;反之则不执行&#xff0c;因此可以起到类…

cdb.exe的利用

cdb.exe的利用 0x01 简介 cdb 是安装 windows debugging tools 时自带的一个命令行调试工具&#xff0c;由微软签发证书。 0x02 cdb.exe加载shellcode ​ cdb.exe是调试工具&#xff0c;可以用来调试指定进程&#xff0c;并且可以在指定进程里分配RWX属性内存并写入shellcod…

临近年底,如何提高软件项目开发效率和开发速度?

1、任务自动分配功能 提高开发效率 为了提高团队的整个任务分配效率&#xff0c;CoCode自主研发任务“自动规划”功能&#xff0c;会根据当前任务属性以及人员技能登记等信息&#xff0c;实现迭代计划的一键规划&#xff0c;为项目经理智能规划出最优的项目计划以及人员工作安排…

ROS1学习笔记:服务数据的定义与使用(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;服务数据的定义与使用 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、模型图二、创建功能包三、自定义服务数据3.1 在package.xml中添加功能包依赖3.2 在CmakeLists.txt中添加编译选项3.3 编译生成的C文件和Python库四、代码实现…

DSPE-PEG-NPC 二硬脂酰基磷脂酰乙醇胺-聚乙二醇-NPC ;功能聚乙二醇化试剂

DSPE-PEG-NPC 二硬脂酰基磷脂酰乙醇胺-聚乙二醇-NPC 名称&#xff1a;DSPE-PEG-NPC 中文名称&#xff1a;二硬脂酰基磷脂酰乙醇胺-聚乙二醇-NPC 英文&#xff1a;1,2-distearoyl-sn-glycero-3-phosphoethanolamine-N-(polyethylene glycol)-NPC 性状&#xff1a;PEG2000为白色…

高校房产管理平台架构及安全性需求分析

数图互通高校房产综合管理平台是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方…

Educational Codeforces Round 99 (Rated for Div. 2) D. Sequence and Swaps

翻译&#xff1a; 您将得到一个序列&#x1d44e;&#xff0c;该序列由&#x1d45b;个整数&#x1d44e;1、&#x1d44e;2、…、&#x1d44e;&#x1d45b;和一个整数&#x1d465;组成。您的任务是使序列&#x1d44e;排序(如果条件&#x1d44e;1≤&#x1d44e;2≤&…

java突发内存和CPU同时100%排查解决

问题说明 springBoot 微服务项目&#xff0c;生产环境突然CPU和内存使用率都100%&#xff0c;导致接口请求超时。 初步排查 接口慢首先排除数据库和慢sql的影响&#xff0c;本次问题是所有接口同事慢&#xff0c;不是单个接口&#xff0c;所以不是数据库问题。大面积接口慢很…

【BP靶场-服务端】SQL注入-17个实验

目录 一、SQL意义 1、目的&#xff1a; 2、示例&#xff1a; 二、检索隐藏数据 实验1&#xff1a;隐藏商品 三、颠覆应用程序逻辑 实验2&#xff1a;登陆逻辑 四、从其他数据库表中检索数据 实验3&#xff1a;判断列 实验4&#xff1a;判断字段对应位置 实验5&#…

门控循环单元(GRU)

门控循环神经网络可以更好地捕获时间步距离很长的序列上的依赖关系。 重置门有助于捕获序列中的短期依赖关系。 更新门有助于捕获序列中的长期依赖关系。 重置门打开时&#xff0c;门控循环单元包含基本循环神经网络&#xff1b;更新门打开时&#xff0c;门控循环单元可以跳…

2023年广东数据分析师CPDA认证招生简章(理论+实战)

CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证&#xff0c;它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者&#xff0c;具有广泛的社会认知度和权威性。 无论是地方政府引进人才、公务员报考、各大企业选聘人才&#xff0c;还是招投标加…

Github上排名前五的开源网络监控工具,附详细的图文说明和项目下载地址

Github上排名前五的开源网络监控工具&#xff0c;附详细的图文说明和项目下载地址。 维护网站正常运行是系统管理员最基本的任务之一&#xff0c;所以对系统进行监视&#xff0c;并保持网络的最佳运行状态至关重要。 在现代的网络中&#xff0c;有许多不同的方法来监视&#…

LeetCode刷题之406 根据身高重建队列(贪心算法)

题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

元宇宙数字产品制作厂商广州华锐互动如何?

近两年&#xff0c;元宇宙引发全球的高度关注&#xff0c;很多玩家也都开始参与进来。作为虚拟世界的重要组成部分&#xff0c;元宇宙也从一个概念逐渐演变成了一种全新的商业模式以及行业发展趋势。 元宇宙具有极致沉浸和交互的体验&#xff0c;可以提升生活、工业、社会、科…

云原生之使用Docker部署OneNav个人书签管理器

云原生之使用Docker部署OneNav个人书签管理器一、OneNav介绍1.OneNav简介2.OneNav特点二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载onenav镜像四、部署OneNav应用1.创建数据目录2.创建OneNav容器3.查看OneNav容器状态五、访问OneNav首页六、访问OneNav后台…

难受的这两天,你们怎么样?

12月23号周五&#xff0c;下班回来小云说中午下楼买菜碰到小区认识的一个妈妈&#xff0c;两个人在楼下聊了一会&#xff0c;晚上那个妈妈检测出阳性&#xff0c;周五晚上睡觉前&#xff0c;小云没任何不适&#xff0c;周末看朋友圈和小区已经很多很多人中招&#xff0c;我那时…

大数据系列——什么是hdfs?hdfs用来干什么的?

目录 一、什么是HDFS 二、hdfs用来干什么的 三、hdfs适用场景 四、hdfs不适合的场景 五、hdfs 架构 基本概念 六、HDFS基础命令 七、hdfs业务中应用 一、什么是HDFS HDFS全称是Hadoop Distributed File System是一种分布式文件系统(HDFS使用多台计算机存储文件&#xff…

易基因|深度综述:癌症中RNA修饰机制的遗传和表观遗传失调(m6A+m1A+m5C+ψ)

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年11月12日&#xff0c;《Trends Genet》杂志发表了题为“Genetic and epigenetic defects of the RNA modification machinery in cancer”的综述文章&#xff0c;讨论了m6A、m5C、…