Linux:git的基础操作

git的下载

版本控制系统一般分为两种,集中式版本控制系统,分布式版本控制系统

什么是集中式版本控制系统:版本库集中存放在中央服务器,工作时候使用自己的电脑,当工作时候在中央服务器上拉取最新版本的代码,然后开始工作,工作完成之后,将自己编写完的代码再推送给中央服务器。

他的缺点也显而易见,当中央服务器宕机时全部的工作就无法再去进行,而且无法确保每个人的网络速度都很快,拉取推送代码会很慢浪费大量时间。(比较有代表性的是:svn,svc等)

什么是分布式版本控制系统:我们的每个主机设备就是一个完整的版本库,我们可以直接在我们本地进行工作,也不用网络,当我们多人协作的时候,只需要相互推送一下代码,这样就可以看到各自的内容

分布式是目前比较热门的一种方式,优点就是不用连接网络确保了我们工作时候只需要在本地,即使是多人协作,他的速度也是非常快的。

缺点就是,可能在本地储存需要大量的储存,在数据方面需要大量的维护

(在线分布式库也有很多:github,gitlab,gitee)

什么是git:git是一个开源的分布式版本控制系统,开源有效,快速的对很小到非常大的项目版本进行管理

下载git

访问官网:

Git - 安装 Giticon-default.png?t=N7T8https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git

 

在这里选择下载的平台版本 

这里下载的gui界面

Gui界面也涵盖了各个平台的


初始化操作

git -v

 # 可以看到git版本

再使用git之需要先去配置一下用户名和邮箱

git config --global user.name 'tarro'

--global : 全局配置对所有仓库生效,如不加这个参数则只对当前仓库生效

--system : 系统配置,对所有用户生效(这个是系统级别配置,一般不使用,一般使用global)

  其实用户名为tarro其实可以不用’’引起来 如果是kali tarro 中间有空格 那就一定需要’’ ,如果没有空格的情况下去掉空格也是可以的 

配置完用户再来配置一下邮箱

git config --global user.email 123@qq.com

由于邮箱中间是没有空格的这里可以直接省略引号

git config --global credential.helper store   

保存一下用户名和密码这样就不用每次都输入了

git config --global --list

可以使用该命令去查看一下刚刚写入的内容

 


创建初始本地仓库

创建仓库一般有两种方式

  1. 在本地进行管理
git init
  1. 克隆远程仓库
git clone

创建本地仓库

git init

该命令直接把当前所在目录变成git的仓库

可以看到我们执行了该命令之后我们的目录后面就有提示一个master的标识

使用ls -a 还可以看到一个隐藏文件.git的文件,这个不可以进去删除,如果删除了里面的东西就可以造成git结构的破坏

如果我直接把.git这个目录删除那么这个目录也不在是master

还可以在git init 后面通过路径的方式去创建git仓库

git init my-git

我们这个就是在当前目录下生成一个git仓库,git init可以写相对路径,也可以写绝对路径

克隆远程仓库 

git clone git@github.com:KALItarro/git.git

这样就把我github上的仓库克隆到本地了

 

 


Linux搭建本地仓库

我准备了两个Linux,一个Windows,分别为

1.centos7   ip: 192.168.6.1    git主服务器

2.centos7   ip: 192.168.6.2    客户端

3.windows10 ip:192.168.6.254   客户端

我分别在Linux和Windows中都安装了git工具

先去搭建Linux的主服务器,在第一台6.1服务器上

去创建一个用户

useradd -m git
echo git:123 | chpasswd

让后切换到这个角色中

su - git
mkdir git && cd git

先去创建一个目录

git init --bare

直接创建一个裸模板库,就是不放在隐藏目录里,直接放目录里

现在就不需要去配置别的了,到第二台6.2服务器上操作即可

我先做个ssh免密,如果不做也是可以的,只不过每次远程操作都要输入密码

在6.2服务器上

ssh-keygen -t rsa

让后一直回车

ssh-copy-id git@192.168.6.1

输入yes然后输入git的密码123即可

先去创建一个名为git的文件夹(不是git也可以)

再去把项目克隆下来

git clone git@192.168.6.1:/home/git/git

由于我们还没在这个里面做任何配置,所以空的是正常的

再次进入刚刚克隆的git目录

创建一个1.html内容为1

echo 1 > 1.html

可以看到刚刚添加的一个,现在我将他添加到暂存区

git add .

这样就添加进去了

git status

可以查看做的操作

让后保存到本地

git commit -m '第一次修改'

-m是注释

下面这报错是没有写用户名和邮箱,设置一下就行

补充完之后再推送即可

git push origin master

推送成功,现在我们把git目录删除,再重新拉取一下就行

这样的话就保存进仓库了,后期做出了修改等操作都可以重新推送

这些就是linux上的一些操作

现在去win10上通过git自带的gui进行一次提交,windows上的git命令也是和Linux上一样的

 

然后多次输入密码

让后就成功连接并且克隆到本地了

我在做个目录中添加一个文件名为321

点击一下rescan就可以看到刚刚做出的操作了

然后依次向下点,分别是放到暂存区,写入本地,推送到服务器

当我们点击了push的时候,如果你没有写你的user名称和邮箱就会弹窗让你写,只需写完重新推送即可

现在我去Linux上拉取一下看看

也可以看到321,这样就同步成功了


工作区域和文件状态

git的工作区域主要分为3个:工作区,暂存区,本地仓库

git的文件一共有4种状态:未跟踪 ,未修改,已修改,已暂存


git init #创建本地仓库
git status #查看仓库状态
git add #添加到暂存区域
git commit #提交

上一节我已经创建了一个本地仓库

我在这创建了一个文件,再使用status去查看发现他是一个未跟踪的一个状态

我使用

git add file1.txt

他现在就是暂存区的了,再去放到本地仓库,他放本地仓库他只会放暂存区域的,我这里再创建一个文件

可以看到新文件没有放到暂存区域,所以等会提交并不会

git commit -m "第一次提交"

 如果不加-m会进入vim的交互模式写入介绍

可以到第一个文件已经不存在了,因为他只会提交在暂存区中的文件

还能通过通配符去匹配内容

我这里创建了几个文件在这个目录里,都是未跟踪状态 

git add *t

或者使用

git add .

将这个目录下所有的对象放到暂存区

 

这次使用

git commit

进行提交,会进入到vim的编辑模式

把介绍写在最上面

可以看到提交过后没有再提交的内容了 

使用

git log

查看提交的历史记录

还可以使用 

git log --oneline

查看简洁的更新内容


reset 版本回退

当需要回退版本的时候  就 使用 git reset 进行版本的回退,可以回退到某次的提交那次

reset 有三种用法 也是就是在后面加上三种参数

git  reset --soft   # 也就是保留工作区和暂存区的内容

get reset --hard  # 也就是丢弃工作区和暂存区的内容

get reset --mixed # 介于上面两者之间,他会保存工作区的东西但是不会保存暂存区的东西

mixed也是reset的默认参数

soft

这里我直接创建几个文件

然后将这个目录复制出来三个

一个目录演示一个操作

先进入到soft中演示一下soft的效果

可以看到我当前没有进行恢复,所以他里面没有要更新的东西,我把他恢复成第二次的记录,不出意外的话再去查看,他应该显示有个3.txt没有暂存,因为当时做第二个快照的时候没有第三个,他也不会去清除第三个,所以他肯定有一个3.txt的没有记录 

 

使用他前面的数值进行恢复一下

git reset --soft 93919bd

 

这样就恢复成功了,可以看到他保留了暂存区

 hard

进入git-hard/目录

可以直接使用HEAD^恢复到上一次快照

git reset --hard HEAD^

可以看到工作目录和暂存区都没有东西了

mixed

最后再去看一下mixed参数

切换到mixed工作目录之后,直接执行

git reset HEAD^

然后查看一下提交历史

可以看到他并没有保存暂存区

操作回溯

在实际操作中我们一般都是使用的,soft和mixed    , hard很少使用,他可能会造成误删除的效果,但是误删除了问题也不大,因为所有操作都是可以进行回溯的

我们再回到hard目录中

使用

git reflog

查看一下操作的历史记录

 

git reset --hard 6892b0f

就直接恢复到指定的步骤了        


diff查看差异

git diff 用于查看差异

可以查看工作目录差异,暂存差异,分支差异等

 

我准备了3个文件,分别是1,2,3.txt   每创建了一个文件夹都进行了一次备份

我直接去更改一下3.txt文件内容

然后使用

git diff

可以看到他的一个改动信息

默认的是工作区和暂存区进行一个比较

可以使用git add .暂存区同步一下

查看工作区和版本库之间的差异 

git diff HEAD

查看暂存区和版本库之间的差异 

git diff --cached

 还可以进行版本之间的比较

只用前面的数值比较即可 

git diff 3854b95 07f5c66

比较上一次提交的版本和当前的提交版本之间的变化

git diff HEAD~ HEAD

 git diff HEAD^ HEAD也是一样的

git diff HEAD~2 HEAD

 就表示之前的两个版本

git diff 3.txt

也可以针对某个文件查看差异内容

git diff 查看分支差异的话直接加上分支的名称就可以了


从版本库中删除文件

有两种办法一种直接在工作目录中删除再同步  一种直接在版本库删除

但是暂存区中的3.txt还没被删除掉

再去更新一下暂存区

发现3.txt没了,这种办法十分的低效

可以直接使用git rm命令去删除

他会把本地工作区和暂存区的都删除掉

 如果不想删除本地的话可以在后面加上--cached

git rm --cached 文件名

 


忽略文件

忽略文件就是不应该加入到版本库中的文件

只要在.gitignore中列出要忽略的清单,他就不会去提交到仓库中

现在我创建了两个log文件

我现在不想把access.log提交到仓库中,我可以这样做

echo access.log > .gitignore

再去提交一下

发现access.log成功被隐藏

我们也可以使用通配符进行配置

我直接编辑.gitignore这个文件

意思是所有log后缀的文件都不上传

现在一切以.log结尾的文件都不上传了

因为刚刚已经上传过了,虽然还有他,但是我现在对other.loh插入一些数据看看 

可以看到他还是会进行记录的,因为他有个前提就是必须是先在.gitignore里写要忽略的文件

如果我已经提交上去了再去进行忽略就是无效的

这时通过git rm命令删除一下就行

 

git rm --cached other.log

此外还可以对整个目录进行忽略

这个就是对整个temp进行忽略

他是支持一些简单的Linux中正则表达式的

这就是一个简单的案例


管理远程仓库

创建好github账户之后创建一个新的仓库

 

创建好仓库等会在下一步,想克隆远程仓库进行工作必须要先进行ssh密钥的认证 

windows上生成ssh密钥 

ssh-keygen -t rsa

一直回车

再去c盘下找到你的用户目录里 

有个.ssh的目录里面id_rsa.pub 内容就是我们需要的密钥

里面这串就是密钥

 Linux下获取密钥

 ssh-keygen -t rsa

一直回车

这个就是密钥

将密钥放入github

然后回到仓库中

点击ssh

然后回到我们设备上

克隆到本地

git clone git@github.com:KALItarro/git.git

不要写我的地址,后面要写你的仓库地址

我这里创建了一个文件,加到了缓存区,又进行了提交,最后推送到github上

现在我到github上看一下

可以成功看到内容了推送成功


关联本地仓库

上一节展示了将仓库克隆下来再进行同步

这次要展示的是将本地已有的仓库推送到公网仓库上

再去创建一个github仓库

然后我在本地创建了一个仓库

我再把他进行暂存,再提交一下本地就可以进行下一步了

复制一下仓库地址

git remote add origin git@github.com:KALItarro/git1.git
git branch -M main
git push -u origin main

这就成功的传上来了   push 是上传   pull是拉取

上传是把本地的数据上传上去,也就是让仓库和本地的进行同步

拉取就是让本地的仓库和github仓库进行同步

我去github里修改一下东西

现在我创建的100个文件都是空文件,我现在在github的在线仓库中的66文件中写入一下东西

 

再到本地进行拉取

 可以看到文件内容被拉取下来了

他拉取下来的内容会被合并,当本地也有同样的文件可能会导致合并失败

还可以用fetch他不会去进行合并


git分支的管理

git的仓库默认是main

使用命令

git branch

可以看到目前就一个main分支

我现在创建3个文件,每创建一个提交一次

我这里使用的GitKraken可以看到每次提交的一个过程

创建分支

现在我创建一个名为dev的分支

git branch dev

现在就可以看到dev分支了,再去进入分支

进入分支

git checkout dev

使用checkout也是可以进入分支的,但是checkout他是可以恢复文件,有些情况下当文件名和分支名称重复了之后,再去使用checkout恢复,他只会先去切换分支

官方因为这个操作,又出了个switch他和checkout都是可以进行切换分支,但是switch是专门用来切换分支的

git switch main

我再切换回dev

git switch dev

 我再到dev分支下创建一些文件,并提交

 再切换回main分支

git switch main

 

可以看到dev里的和main的不同步所以他们互不干扰

合并分支

我现在在main里 想把dev的内容合并到main里
 

git merge dev

如果想把main的合并进dev里的话,需要先切换到dev里然后执行 git merge main

可以看到现在dev合并过来了

git log --graph --oneline --decorate --all

可以看到合并的情况

删除分支

当我合并完分支之后 

发现dev分支依然存在

分支必须要进行手动删除

git branch -d dev

-d是删除已合并的分支,无法删除未合并的

-D是强制删除,都可以删除


解决合并分支冲突

我先在main分支的main内容为1

我切换到feach分支中去修改main1中的内容并且去提交

git switch feach

再去提交,再换回main分支也去修改main1的文件内容

也是去提交,再进行合并,由于都是在一个文件同样的位置,所以合并就报错

git merge feach

可以看到已经报错了

git diff

可以看到具体的内容

main1中成这样的,我们再这里进行合适的调整之后,再去提交就自动进行合并了

合并成功了

如果想终止合并的话可以使用

git merge --abort

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

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

相关文章

U盘变身“本地磁盘”?数据恢复与防范策略大揭秘

一、突发状况:U盘秒变“本地磁盘” 在日常工作生活中,U盘凭借其便携性和大容量,成为我们存储和传输数据的重要工具。然而,有时我们会遇到这样一个棘手的问题:原本应显示为可移动磁盘的U盘,在插入电脑后却突…

Nginx 的安装、启动和关闭

文章目录 一、背景说明二、Nginx 的安装2.1、依赖的安装2.2、Nginx 安装2.3、验证安装 三、启动 Nginx3.1、普通启动3.2、如何判断nginx已启动3.3、通过配置启动3.4、设置开机启动 四、关闭 Nginx4.1、优雅地关闭4.2、快速关闭4.3、只关闭主进程4.4、使用nginx关闭服务 五、重启…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包:第七:trans_network class

# 网络是研究微生物生态共现模式的常用方法。在这一部分中,我们描述了trans_network类的所有核心内容。 # 网络构建方法可分为基于关联的和非基于关联的两种。有几种方法可以用来计算相关性和显著性。 #我们首先介绍了基于关联的网络。trans_network中的cal_cor参数…

编曲学习:如何编写钢琴织体 Cubase12逻辑预置 需要弄明白的问题

钢琴织体是指演奏形式、方式,同一个和弦进行可以用很多种不同的演奏方法。常用织体有分解和弦,柱式和弦,琶音织体,混合织体。 在编写钢琴织体前,先定好歌曲的调。 Cubase小技巧:把钢琴轨道向上拖动打和弦轨道,就可以显示和弦!如果你有一些参考工程,不知道用了哪些和…

yum安装mysql及数据库补全功能

centos7上面没有mysql,它的数据库名字叫做mariadb [rootlocalhost ~]#yum install mariadb-server -y [rootlocalhost ~]#systemctl start mariadb.service [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#ss -na…

kerberos验证协议安装配置使用

一、kerberos是什么 Kerberos 是一个网络身份验证协议,用于在计算机网络中进行身份验证和授权。它提供了一种安全的方式,允许用户在不安全的网络上进行身份验证,并获取访问网络资源的权限。 二、安装配置kerberos服务端 1、安装kerberos #检…

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库,nodejs语言和IDEA以及微信开发者工具作为开发工具,这些技术和工具我在日常的作业中都经常的使用,并且因为对编程感兴趣,在闲暇时间也进行的进行编程的提高,所以在…

计算机二级(Python)真题讲解每日一题:《十字叉》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪…

二、python基础

一、关键字(保留字) 指在python中赋予特定意义的一类单词,不能将关键字作为函数、变量、类、模块的名称 import keyword#利用内存模块keyword print(keyword.kwlist)#输出所有关键 print(len(keyword.kwlist))#利用内置函数len()输出关键字的…

SpringBoot ApplicationListener实现发布订阅模式

文章目录 前言一、Spring对JDK的扩展二、快速实现发布订阅模式 前言 发布订阅模式(Publish-Subscribe Pattern)通常又称观察者模式,它被广泛应用于事件驱动架构中。即一个事件的发布,该行为会通过同步或者异步的方式告知给订阅该事件的订阅者。JDK中提供…

Error response from daemon Get server gave HTTP response to HTTPS client

使用docker compose拉起docker镜像时,若出现如下报错 Error response from daemon: Get "https://devops.test.cn:5000/v2/": http: server gave HTTP response to HTTPS client表示Docker守护进程无法从指定url获取响应, 可能原因有以下&…

苍穹外卖-day09:用户端历史订单模块(理解业务逻辑),商家端订单管理模块(理解业务逻辑),校验收货地址是否超出配送范围(相关API)

用户端历史订单模块 1. 查询历史订单(分页查询) 1.1 需求分析和设计 产品原型: 业务规则 分页查询历史订单可以根据订单状态查询展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细&#…

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01

一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式(静态工厂方法) 简单工厂…

猫头虎分享已解决Bug || TypeError: Cannot interpret ‘float‘ value as integer.

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

利用自定义 URI Scheme 在 Android 应用中实现安全加密解密功能

在现代移动应用开发中,安全性和用户体验是至关重要的考虑因素。在 Android 平台上,开发人员可以利用自定义 URI Scheme 和 JavaScript 加密解密技术来实现更安全的数据传输和处理。本文将介绍如何在 Android 应用中注册自定义 URI Scheme,并结…

计算机组成原理——自己制作一个cpu

cpu包括单周期cpu、中断cpu、多周期cpu 代码实现之后在实验箱看效果,并且看波形图 单周期波形 中断cpu 多周期cpu 1.单周期CPU总体电路图 如图是一个简单的基本上能够在单周期CPU上完成所要求设计的指令功能的数据通路和必要的控制线路图。其中指令和数据各存储在不…

超越想象的数据可视化:五大工具引领新潮流

在数据分析领域,数据可视化工具是每位分析师的得力助手。它们能够将复杂的数据转化为直观、易懂的图表和图像,帮助分析师快速洞察数据背后的规律与趋势。下面,我将从数据分析师的角度,为大家介绍五个常用的数据可视化工具。 一、…

【vue.js】文档解读【day 5】| ref模板引用

如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 模板引用前言访问模板引用模板引用与v-if、v-show的结合v-for中的模板引用函数模板引用 模板引用 前言 …

Vue.js+SpringBoot开发食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

二蛋赠书十八期:《一本书讲透Elasticsearch:原理、进阶与工程实践》

Elasticsearch 是一种强大的搜索和分析引擎,被广泛用于各种应用中,以其强大的全文搜索能力而著称。 不过,在日常管理 Elasticsearch 时,我们经常需要对索引进行保护,以防止数据被意外修改或删除,特别是在进…