git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

news2024/9/29 17:25:23

git新建库与本地库同步

gitee使用教程,git的下载与安装接不在叙述了。

  1. 新建远程仓库
    在这里插入图片描述新建远程仓库必须要使用仓库提供的api,也就是仓库门户网站,例如gitee,github,gitlab等。在上图中使用gitee网址中新建了一个test仓库,默认生成一个master分支,新建仓库时里面必须要有文件,这是git得要求。

另外第一次生成时候可能还会出现一个教程,一些配置命令:

git创建一个仓库的初始化操作

  • git config --global user.name "xiaoxu"
  • git config --global user.email xiaoxu@example.com
  • git init
  • touch README
  • git add .
  • git commit -m "message"
  • git remote add XXX
  • ...

git config --list查看更多命令gitee教程

其中实现本地仓库绑定远程仓库同步的就是git remote add了。

初始化本地仓库并绑定远程仓库地址后,就可以实现上传文件并同步文件了:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
上传步骤就在本地初始化了一个仓库,但是git还未对新建的文件追踪。除了上述初始化外还可以从远程仓库直接克隆到本地git clone xxx

在这里插入图片描述
远程test仓库被克隆下来,包含初始化额文件:
在这里插入图片描述

上述两种均可创建本地仓库,但是第二种是更方便的,如果gitee门户网站配置了的话,本地仓库就无需任何配置,但是如果是克隆的别人的仓库,就需要修改配置。

git文件追踪

初始化仓库的两种方式与区别

git init创建完仓库后就需要对文件实现追踪,使用的git命令是git add将需要上传的文件添加到git缓存区,就实现了追踪了。

可以使用git status查看追踪状态,只有被git追踪的文件才会被上传。类似于vsode,idea只是ide,不管如何在其中修改代码,都不会改变git缓存区中的文件,当删除了编辑器的文件,git缓存区任然存在,必须通过其它文件清楚缓存区文件,但是一般情况下类似于idea,goland实现vcs绑定git后都自动绑定了删除命令,无需人为操作。在编辑器中删除某些文件自动同步到git缓存区和本地仓库

在上一节新建仓库后,通过git add命令添加文件到git缓存区实现git链路追踪:

在这里插入图片描述> git status命令可以看到默认创建的mater分支和缓存区中的new file,当然也显示了git rm --cached命令后续在讲。

git commit命令推送到本地仓库

在这里插入图片描述>本地仓库非常重要,因为线上的仓库内容都来自本地仓库。

推送本地仓库融合到远程仓库git push命令
在这里插入图片描述然后就出错了,这里可能想到本地库只有README文件,而线上库可不止,而且文件内容也不一样。
在这里插入图片描述在这里插入图片描述
那么把线上的pull一下merge后再推送呢?然而如下:

在这里插入图片描述
又出现一大堆提示,而且文件也没拉下来,这里既不可以pull,又不可以push是什么情况呢?

这是由于两个仓库不同源,git的链路追踪是独立的,因此两个不同的git链路追踪不可使用git命令融合,只有同源的链路追踪才可以使用git得命令。

本地仓库和远程仓库有不同的开始点,也就是两个仓库没有共同的commit出现,无法提交,此时我们需要allow-unrelated-histories

显然这才初始化的过程中是不合理的,git官方也提供了响应的更改使得不同源的可以融合,更改命令如下:

git pull origin master --allow-unrelated-histories
通过上面的更改,在git pull一次后,线上被merge到本地仓库中,代码融合,实现了同源。这时再pull就可以了,提交上去的本地仓库也是融合了的。

在这里插入图片描述
在克隆时候仓库名会以文件的格式生成,因此直接克隆下来的是一个文件下,对文件的操作需要进入该文件里:

  • cd test

在这里插入图片描述可以看到文件下存在一个.git文件表示存在git仓库,并且配置和远程一模一样,文件也都一样。

vi hello
在这里插入图片描述在这里插入图片描述
在这里插入图片描述git add加入git追踪后git commit提交到本地仓库,甚至都不需要git pull一下就能直接git push而且是成功上传。
在这里插入图片描述在这里插入图片描述

建议

建议都使用git clone命令创建本地仓库,因为是直接把线上克隆下来都是完全一样的,但是克隆别人的仓库需要修改配置可能麻烦点,自己仓库时非常方便的,如下test1文件中就是克隆完成的。

缓存、本地仓库、远程仓库同步问题

|     
|     缓存   =========》   本地仓库    =========》   远程仓库
|

首先在使用idea,goland等ide时如果初始化了git仓库并实现了远程仓库连接(同源配置成功)后,用ide打开文件,会自动实现git得绑定,除了git commit,git pull,git push命令外其它都是自动化实现了,无需人为操作,但是是ide在后台执行了命令。如下:

在这里插入图片描述甚至都没有git add , git rm , git rebase , git restore 等其它命令。

git add命令在创建文件时就执行了,如果第一次使用可能会提示一下,有view files, always add , do not ask again的选项,如下:

在这里插入图片描述甚至会贴心使用不同的颜色区分,如下main.go

在这里插入图片描述
当点击左下角的always add后就可以使其不再弹出了,但是有遇到一个问题,如果创建的文件不想添加到git追踪中该如何操作呢?

  1. 在这里不总是添加,点击View Files选择添加,使创建文件时手动选择。
  2. 直接关闭弹窗,都不添加,使用git add在terminal指定添加
  3. always add后在缓存中添加但是不上传到本地仓库,同步远程时也自然不会上传到远程。

建议:建议都选always add添加到缓存无所谓的,通过.gitignore文件配置一下不上传到本地仓库就可以了。不限麻烦也可以手动操作。

文件 .gitignore 的格式规范如下:

所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式最后跟反斜杠(/)说明要忽略的是目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。

# 此为注释 – 将被 Git 忽略
    # 忽略所有 .a 结尾的文件
    *.a
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    /TODO
    # 忽略 build/ 目录下的所有文件
    build/
    # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    doc/*.txt

ide自动完成了大多是的工作,那么离开ide使用命令该如何处理呢?

git缓存区删除文件并清除文件跟踪

git将git add到缓存区的内容移除使用git rm 。如果直接删除文件不管git追踪会发生什么呢?

在这里插入图片描述
如果直接删除可以看到git已经检测到文件被删除了,如下
在这里插入图片描述
在这里插入图片描述
远程仓库的hello文件还存在,如下图:

在这里插入图片描述git commit提交到本地仓库

在这里插入图片描述git push提交到远程仓库
在这里插入图片描述结果发现main.go成功提交,但是hello任然在远程仓库中,
在这里插入图片描述说明本地仓库还存在hello文件,本地仓库文件是从缓存区提交的,那么缓存区也还存在,可见直接删除文件并不会销毁git得文件追踪。

git rm 命令从缓存区移除指定文件

在这里插入图片描述

git rm 就是rm + git reset的合体,本地文件也一起删了,但是git reset只移除git追踪不会删除本地文件

如下对比,直接删除

在这里插入图片描述git rm移除缓存区后再次提交,删除过程和记录也被提交,如下:
在这里插入图片描述
再次推送到远程仓库

在这里插入图片描述
可以看到远程删除过程也同步了,本地仓库的删除merge到远程仓库,hello文件消失

在这里插入图片描述
在提交记录里面查看也记载了hello被删除了

在这里插入图片描述
和本地如初一折

在这里插入图片描述

git reset命令

git reset命令也是可以将暂存区的文件取消暂存另外还可以切换到指定版本,git reset HEAD切换到上一个版本。

再次新建hello文件并缓存

在这里插入图片描述
git reset命令取消缓存

在这里插入图片描述
现在测试回溯上一个版本功能,如下查看hello内容为hello
在这里插入图片描述git add后追加内容,再次git add,如下

在这里插入图片描述

git已经检测出来hello文件被修改了modified,但是可以看到modified hello部分是在Changes not staged for commit中的,也就是修改部分还没被git跟踪。

在这里插入图片描述如上图所示重新git add到缓存区,此时修改的部分也添加到缓存区了。git reset一次查看,如下

在这里插入图片描述git reset后hello回到了没被git追踪的状态。

git reset HEAD 是回溯到上一版本。

git restore命令

git restore命令是撤销的意思,文件从未被git追踪撤销,回到被追踪的状态,就是说git reset的逆命令,该命令有git restore <file>it restore --staged <file>两种常用的用法。

前者用户撤销未被git追踪切没有在工作区修改的撤销,(撤销修改了的文件不会报错,但没反应)后者撤销被移除git追踪且修改的文件(保留修改)。

没有直接的命令可以操作本地仓库,这是由于本地仓库是远程仓库的一个分支,如果随便修改可能造成无法融合代码,所以对文件的所有修改和变动都记录再缓存中,确定后再将需要融合的代码提交到本地仓库。

例如需要删除一个多余的文件,就需要在缓存区中先删除文件,再提交到本地仓库,git追踪记录删除的过程,提交后git系统自动应用删除记录,从而使本地仓库也同步进行。

案例:commit了words文件,需要删除它,并同步到远程仓库?

  • git rm hello (或者git reset)
  • git commit

上述两部直接同步了,应为缓存区的操作会被记录并在git commit 时自动应用,本地仓库是没有直接命令修改的,开发者对缓存区操作,操作被git系统记录,并在下一次git commit时自动应用。

在这里插入图片描述

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

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

相关文章

【无语】Microsoft Edge 浏览器不显示后台返回的数值数据

Microsoft Edge 禁用 JSON 视图 写在前面禁用 JSON 视图 写在前面 遇到一个有意思的事情&#xff0c;在用 Microsoft Edge 浏览器发送请求测试时发现&#xff0c;后端返回的数值数据没有正常展示&#xff0c;而是类似查看源码的结果&#xff0c;只显示了一个行号1&#xff0c;…

SpringMVC01

SpringMVC 1. 学习⽬标2. 什么叫MVC&#xff1f;3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2&#xff1a; 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什…

Android Studio: 解决Gradle sync failed 错误

文章目录 1. 前言2. 错误情况3. 解决办法3.1 获取gradle下载地址3.2 获取gradle存放目录3.3 替换并删除临时文件3.4 触发Try Again 4. 执行成功 1. 前言 今天调试项目&#xff0c;发现新装的AS&#xff0c;在下载gradle的过程中&#xff0c;一直显示连接失败&#xff0c;Gradl…

Zookeeper-快速开始

Zookeeper介绍 简介&#xff1a;ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。 设计目标&#xff1a;将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效…

数据可视化---饼图、环形图、雷达图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

linux:掌握systemctl命令控制软件的启动和关闭、掌握使用ln命令创建软连接

掌握使用systemctl命令控制软件的启动和关闭 一&#xff1a;systemctl命令&#xff1a; Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动停止、开机自启 能够被systemctl管理的软件一般也称之为:服务 语法: systemctl | start | stop | status | enable …

JDK各个版本特性讲解-JDK17特性

JDK各个版本特性讲解-JDK17特性 一、JAVA17概述二、语法层面的变化1.JEP 409&#xff1a;密封类2.JEP 406&#xff1a;switch模式匹配&#xff08;预览&#xff09; 三、API层面变化1.JEP 414&#xff1a;Vector API&#xff08;第二个孵化器&#xff09;2.JEP 415&#xff1a;…

10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

文章目录 UDP协议&#xff1f;什么是校验和&#xff1f;基于UDP的应用层协议(了解) TCP协议确认应答(可靠性机制)超时重传(可靠性机制)连接管理(可靠性机制)三次握手(重点)四次挥手(重点) 三次握手和四次挥手时客户端和服务器的状态滑动窗口(效率机制)流量控制(效率机制)窗口探…

【论文笔记】动态蛇卷积(Dynamic Snake Convolution)

精确分割拓扑管状结构例如血管和道路&#xff0c;对医疗各个领域至关重要&#xff0c;可确保下游任务的准确性和效率。然而许多因素使分割任务变得复杂&#xff0c;包括细小脆弱的局部结构和复杂多变的全局形态。针对这个问题&#xff0c;作者提出了动态蛇卷积&#xff0c;该结…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列&#xff0c;第一批先开放新加坡和硅谷地域。 控制台链接&#xff1a;https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作&#xff0c;将自建的 Roc…

搭建 ElasticSearch 集群环境

安装基础环境 我们用虚拟机创建出3台机器&#xff0c;查看centos版本为7.9 [roots1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (AltArch)下载相关命令 yum -y install vim* yum -y install net-tools yum -y install lsof yum -y install wget yum -y ins…

SpringBoot知识点回顾01

Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是如何简化Java开发的 为了降低Java开发的复杂性&#xff0c;Spring采用了以下4种关键策略&#xff1a; 1、基于POJO的轻量级和最小侵入性编程&#xff0c;所有东西都是bean&#xff1b; 2、通…

Tomcat 部署论坛

一、安装好mysql数据库和jdk之后 开始部署论坛 用Navicat Premium 15连接mysql数据库并创建jforum数据库 下载版本 点击安装选择minninum点击下一步 点击一下一步 选择默认安装路径 安装验证&#xff0c;在安装完毕且启动Apache Tomcat&#xff0c;通过浏览器访问tomcat的80…

Google Earth Engine谷歌地球引擎GEE批量下载ImageCollection遥感影像数据合集的方法

本文介绍在谷歌地球引擎GEE中&#xff0c;批量导出、下载ee.ImageCollection格式的多张栅格遥感影像数据的简便方法。 本文是谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;系列教学文章的第十九篇&#xff0c;更多GEE文章请参考专栏&#xff1a;GEE…

[最后一个月征稿、ACM独立出版】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 一、大会简介 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地…

pycharm运行正常,但命令行执行提示module不存在的多种解决方式

问题描述 在执行某个测试模块时出现提示&#xff0c;显示自定义模块data不存在&#xff0c;但是在PyCharm下运行正常。错误信息如下&#xff1a; Traceback (most recent call last):File "/run/channelnterface-autocase/testcases/test_chanel_detail.py", line 2…

基于ssm高校推免报名系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把高校推免报名管理与现在网络相结合&#xff0c;利用java技术建设高校推免报名管理系统&#xff0c;实现高校推免报名的信息化。则对于进一步提高高校推免报名管理发展&#xff0c;丰富高校推免报名管理经验能起到不少的促进作用。…

XZ_iOS 之 M1 M2 M3的M系列芯片的Mac苹果电脑安装cocoapods

安装的前提&#xff0c;应用程序->终端->右键-显示简介->勾选 使用Rosetta打开&#xff0c;如下图&#xff0c;然后重启终端 安装的顺序如下&#xff1a;Homebrew->rvm->ruby->cocoapods 1、安装Homebrew /bin/bash -c "$(curl -fsSL https://raw.git…

算法02哈希法

算法01之哈希法 1.哈希法理论基础1.1哈希表&#xff08;1&#xff09;哈希表&#xff08;2&#xff09;哈希函数&#xff08;3&#xff09;哈希碰撞 1.2哈希法基本思想1.3哈希法适用场景与最常用的哈希结构 2.LeetCode242&#xff1a;有效的字母异位词&#xff08;1&#xff09…

Kafka核心参数(带完善)

客户端 api Kafka提供了以下两套客户端API HighLevel(重点)LowLevel HighLevel API封装了kafka的运行细节&#xff0c;使用起来比较简单&#xff0c;是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管理Kafka的运行细节&#xff0c;Partition&#x…