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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务:高并发带来的问题的容错方案

1.相关脚本(陈天狼) 启动nacos客户端: startup.cmd -m standalone 启动sentinel控制台: # 直接使⽤jar命令启动项⽬(控制台本身是⼀个SpringBoot项⽬) java -Dserver.port8080 -Dcsp.sentinel.dashboard.serverlocalhost:808…

【渗透测试实战】用渗透实例sqllibs第46关来讲解SQL报错注入的操作顺序

1、查出库名(database()) http://127.0.0.1/sqli7/Less-46/?sortupdatexml(1,if(12,1,concat(0x7e,database(),0x7e)),1) 2、通过库名,查表名(table_name) http://127.0.0.1/sqli7/Less-46/?sortupdatexml(1,if(12…

VMware虚拟机和主机之间无法复制粘贴,移动文件,重新安装vmware-tools变灰,VMware Tools继续运行脚本未能在虚拟机中成功运行。

起初,虚拟机只是无法和主机之间进行复制粘贴,移动文件。查询了很多资料,反反复复地安装卸载vmware-tools,但是都没有成功。通过这篇文章:虚拟机安装VMware Tools的两种方法_vmware tools有3种安装方式-CSDN博客 安装了vmware_too…

中国巨型地下中微子实验室准备探究宇宙奥秘

JUNO设施将于今年上线,将有助于确定哪种类型的中微子质量最高 - 这是物理学中最大的谜团之一。 中国江门地下中微子天文台(JUNO)的建设工作。朱诺号希望在2024年底之前探测到中微子。图片来源:Qiu Xinsheng/VCG via Getty 开平区…

JAVA八股day1

遇到的问题 相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小为什么说是几乎所有对象实例都存在于堆中呢?静态变量和成员变量、成员变量和局部变量的区别为什么浮点数运算的时候会有精度丢失的风险?如何解…

PHP姓名快速匿名化工具(重组脱敏)

PHP姓名重组工具(脱敏/匿名化工具) 将excel数据姓名列粘贴提交&#xff0c;得到随机姓随机中间字随机尾字的重组姓名 那些年自用瞎搞的代码&#xff0c;今日整理成网页交提交得到结果的交互功能分享。 <?php //PHP姓名重组工具(脱敏/匿名化工具) //将excel数据姓名列粘贴…

Linux TCP参数——tcp_adv_win_scale

文章目录 tcp_adv_win_scaleip-sysctl.txt解释buffering overhead内核缓存和应用缓存示例计算深入理解从2到1(tcp_adv_win_scale的值)总结 tcp_adv_win_scale adv-advise&#xff1b;win-window; 用于指示TCP中接收缓存比例的值。 static inline int tcp_win_from_space(int …

蓝桥杯-Python组(一)

1. 冒泡排序 算法步骤&#xff1a; 比较相邻元素&#xff0c;如果第一个大于第二个则交换从左往右遍历一遍&#xff0c;重复第一步&#xff0c;可以保证最大的元素在最后面重复上述操作&#xff0c;可以得到第二大、第三大、… n int(input()) a list(map(int, input()…

java实现kml文件下载接口

根据业务需求&#xff0c;需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 RequestMapping(value "/getFlyingPathFile/{uavTypeId}/{flyingPathId}.kml", method RequestMethod.GET, produces "application/vnd.google-earth.kmlxml") Respons…

轻松打造完美原型:9款在线工具推荐

早年&#xff0c;UI设计师选择的工具有限&#xff0c;功能相对单一&#xff0c;大多数在线原型设计工具都是国外的&#xff0c;语言和网络都增加了设计工作的负担。如今&#xff0c;国内外有许多在线原型设计工具&#xff0c;不仅可以在浏览器上使用&#xff0c;而且还具有团队…

wsl or 虚拟机 安装

1.wsl2安装 WSL全称Windows Subsystem for Linux&#xff0c;是微软开发的适用于Linux的Windows子系统 如今已经有两代了&#xff1a; 所以用的多的还是wsl2。 安装前需要先去设置启用或关闭Windows功能&#xff1a; 打开适用于linux的子系统和虚拟机平台。 Microsoft Store里…

论文阅读——MoCo

Momentum Contrast for Unsupervised Visual Representation Learning 动量在数学上理解为加权移动平均&#xff1a; yt-1是上一时刻输出&#xff0c;xt是当前时刻输入&#xff0c;m是动量&#xff0c;不想让当前时刻输出只依赖于当前时刻的输入&#xff0c;m很大时&#xff0…

小程序搜索排名优化二三事

小程序的优化主要是排名优化和性能优化两个版块。性能优化这方面主要靠开发者自己完善&#xff0c;我们团队提供的服务就是把产品的排名打上去&#xff0c;获得更多的自然流量&#xff0c;实现盈利。 如何提升小程序的搜索排名主要从如下几个方面出发&#xff1a; 首先要知道…

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

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

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…

PHP反序列化---字符串逃逸(增加/减少)

一、PHP反序列化逃逸--增加&#xff1a; 首先分析源码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class A{public $v1 ls;public $v2 123;public function __construct($arga,$argc){$this->v1 $arga;$this->v2 $argc;} } $a $_GET[v…

计算机组成原理-2-计算机的发展应用

2. 计算机的发展应用 文章目录 2. 计算机的发展应用2.1 计算机的发展史2.1.1 计算机的产生和发展2.1.2 微型计算机的出现和发展2.1.3 软件技术的发展和兴起 2.2 计算机的应用和展望 本笔记参考哈工大刘宏伟老师的MOOC《计算机组成原理&#xff08;上&#xff09;_哈尔滨工业大学…

sqllab第二十四关通关笔记

知识点&#xff1a; 二次注入 先埋一个炸弹&#xff0c;然后通过其他路径引爆它 查看界面发现是一个登录框&#xff0c;尝试进行登录框的注入发现这里不存在注入点 那么就注册一个新的账户吧 通过点击注册&#xff0c;进入注册面板&#xff0c;注册一个新的账户 用户名为 re…

react native 实现自定义底部导航与路由文件配置

首先先把需要的一些库引入 yarn install react-navigation/native yarn install react-native-screens react-native-safe-area-context yarn install react-navigation/native-stack yarn add react-navigation/bottom-tabs 创建路由文件及四个底部导航页面 router文件下的bot…

车载电子电器架构 - 网络拓扑

车载电子电器架构 - 网络拓扑 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…