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://xiahunao.cn/news/2871353.html

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

相关文章

每日OJ题_简单多问题dp⑧_力扣188. 买卖股票的最佳时机 IV

目录 力扣188. 买卖股票的最佳时机 IV 状态机分析 解析代码 力扣188. 买卖股票的最佳时机 IV 188. 买卖股票的最佳时机 IV 难度 困难 给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取…

大话设计模式——8.原型模式(Prototype Pattern)

1.介绍 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。属于创建型模式。 UML图: 1)浅拷贝: 指创建一个新的对象,然后将原始对象的字段值复制到新对象中。如果字段是基本类型,直接复制…

【Canvas与艺术】砂落字现

【注意】 本作代码需要在服务器端执行,不可用浏览器直接打开运行。 如何安装服务器端请参考:https://www.cnblogs.com/heyang78/p/3339235.html 【原理】 雨粒子落下时,如果当前点不是黑点,则化身为金字的一个像素点。 【效果…

28.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测结果用提示框的形式显示

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:27.数据推测功能…

ASPICE-SYSSWE

文章主要内容: Automotive SPICE 过程参考模型 SYS.1 需求挖掘 过程ID SYS.1 过程名称 需求挖掘 过程目的 需求挖掘过程的目的是:在产品和/或服务的整个生命周期内收集、处理和跟踪不断变化的利益相关方的需要和需求,从而建立一个需求基线&#x…

【方法封装】时间格式化输出,获取请求设备和IP

目录 时间类 1.1 获取当前时间,以特定格式化形式输出 1.2 自定义时间,以特定格式化输出 1.3 获取当前时间,自定义格式化 1.4 自定义时间,自定义格式化 设备类 根据请求头信息,获取用户发起请求的设备 请求IP类 …

走进volatile的世界,探索它与可见性,有序性,原子性之间的爱恨情仇!

写在开头 在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码…

在Windows系统上搭建MongoDB-这篇文章刚刚好

在Windows系统上搭建MongoDB集群 文章目录 1.下载MongoDB2.集群描述3.构建集群文件目录4.新建配置文件5.启动MongoDB服务6.配置集群7.集群测试8.设置密码和开启认证一、安装MongoDB 1.下载MongoDB 去MongoDB官网下载解压版免安装的压缩包。 https://www.mongodb.com/try/do…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 近年来,勒索病毒的威胁日益增加,其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点,以及如何恢复被其加密的数据文件,并提供预防措施&a…

网络安全JavaSE第二天(持续更新)

3. 基本数据与运算 3.6 运算符 3.6.1 算术运算符 在 Java 中,算术运算符包含:、-、*、/、% public class ArithmeticOperator { public static void main(String[] args) { int a 10; // 定义了一个整型类型的变量 a,它的值是 10 int b …

误删电脑C盘要重装系统吗 误删电脑C盘文件怎么恢复 误删c盘系统文件怎么修复 不小心删除C盘的东西恢复

C盘通常是操作系统(如Windows)的默认安装目录。它包含了操作系统的核心文件、驱动程序及系统所需的各种支持文件。这些文件对于计算机的正常运行至关重要。如果我们不小心将C盘的重要文件删除,会导致应用无法打开。本篇文章,我们将学习误删电脑C盘要重装…

再见 Pandas,又一数据处理神器

cuDF介绍 cuDF是一个基于Apache Arrow列内存格式的Python GPU DataFrame库,用于加载、连接、聚合、过滤和其他数据操作。cuDF还提供了类似于pandas的API。 GitHub: https://github.com/rapidsai/cudf Documentation: https://docs.rapids.a…

Alma Linux - Primavera P6 EPPM 安装及分享

引言 继上一期发布的Rocky Linux版环境发布之后,近日我又制作了基于Alma Enterprise Linux 的P6虚拟机环境,同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机,请先与Oracle Primaver…

四连通与八连通的区别 -- 图例讲解

概念 四连通区域:指从某个点出发,只能通过上、下、左、右四个方向的运动到达区域内的其他点,且不能跨越区域的边界。 八连通区域:除了上、下、左、右四个方向,还可以沿对角线方向(左上、右上、左下、右下…

Python 查找并高亮PDF中的指定文本

在处理大量PDF文档时,有时我们需要快速找到特定的文本信息。本文将提供以下三个Python示例来帮助你在PDF文件中快速查找并高亮指定的文本。 查找并高亮PDF中所有的指定文本查找并高亮PDF某个区域内的指定文本使用正则表达式搜索指定文本并高亮 本文将用到国产第三方…

Spring Web MVC入门(3)

学习Spring MVC 请求 传递JSON数据 JSON概念 JSON: JavaScript Object Natation JSON是一种轻量的数据交互格式, 采用完全独立于编程语言的文本格式来存储和标识数据. 简单来说, JSON是一种数据格式, 有自己的格式和语法, 使用文本来表示对象或数组的信息, 因此JSON的本质…

C++之deque与vector、list对比分析

一.deque讲解 对于vector和list,前一个是顺序表,后一个是带头双向循环链表,前面我们已经实现过,这里就不再讲解了,直接上deque了。 deque:双端队列 常见接口大家可以查看下面链接: deque - …

Java多线程实战-CountDownLatch模拟压测实现

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

深度学习 精选笔记(13.2)深度卷积神经网络-AlexNet模型

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

单片机学到什么程度才可以去工作?

单片机学到什么程度才可以去工作? 如果没有名校或学位的加持,你还得再努力一把,才能从激烈的竞争中胜出。以下这些技能可以给你加分,你看情况学,不同行业对这些组件会有取舍: . Cortex-M内核:理解MCU内核各部件的工作机制&#…