Git(见资源)

news2024/12/24 9:44:14

Git的概念

【1】Git技术:公司必备,一定要会

【2】Git概念:

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。

【3】什么是版本控制?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 。

【4】为什么要使用版本控制?

软件开发中采用版本控制系统是个明智的选择。

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。

就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。

但额外增加的工作量却微乎其微。你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

【5】版本控制系统的分类:

❀集中化的版本控制系统:

集中化的版本控制系统诸如CVS, SVN 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客 户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法,这种做法带来了许多好处,现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统;要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

❀分布式的版本控制系统

由于上面集中化版本控制系统的那些缺点,于是分布式版本控制系统面世了。

在这类系统中,像Git, BitKeeper 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。这样,你就可以在同一个项目中分别和不同工作小组的人相互协作。

分布式的版本控制系统在管理项目时存放的不是项目版本与版本之间的差异.它存的是索引(所需磁盘空间很少所以每个客户端都可以放下整个

项目的历史记录)

Git简史

Linux ---> 人越来越多 ---->代码优化的越来越好 ---》项目管理工具

---》Bitkeeper ---》终止合作 ---》一周Git --》一个月内将Linux管理在Git上---》开源,免费 ---》用户群大

Git的安装过程

【1】Git官网:

https://git-scm.com/

【2】安装过程:

一直下一步

点击Git Bash Here打开Git终端:

Git结构

代码托管中心_本地库和远程库的交互方式

【1】代码托管中心是干嘛的呢?

我们已经有了本地库,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?

它的任务是帮我们维护远程库,

下面说一下本地库和远程库的交互方式,也分为两种:

(1)团队内部协作

(2)跨团队协作

【2】托管中心种类:

局域网环境下: 可以搭建 GitLab服务器作为代码托管中心,GitLab可以自己去搭建

外网环境下:可以由GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建

初始化本地仓库

【1】创建一个文件夹:

【2】打开Git终端:

Git Bash Here:

进入以后先对字体和编码进行设置:

在Git中命令跟Linux是一样的:

(1)查看git安装版本:

(2)清屏:

(3)设置签名:

设置用户名和邮箱:

(4)本地仓库的初始化操作:

.git目录是隐藏的:可以调出来查看:

查看.git下内容:

注意事项: .git目录下的本地库相关的子目录和子文件不要删除,不要胡乱修改。

Git常用命令

add和commit命令

添加文件: add 提交文件:commit

展示:

【1】先创建一个文件:

【2】将文件提交到暂存区:

【3】将暂存区的内容提交到本地库:

注意事项:

(1)不放在本地仓库中的文件,git是不进行管理

(2)即使放在本地仓库的文件,git也不管理,必须通过add,commit命令操作才可以将内容提交到本地库。

status命令

git status看的是工作区和暂存区的状态

创建一个文件,然后查看状态:

然后将Demo2.txt通过git add命令提交至:暂存区:

查看状态:

利用git commit 命令将文件提交至:本地库

现在修改Demo2.txt文件中内容:

然后再查看状态:

重新添加至:暂存区:

然后将暂存区的文件提交到本地库:

提交完再查看状态:

log命令

git log 可以让我们查看提交的,显示从最近到最远的日志

log命令2

当历史记录过多的时候,查看日志的时候,有分页效果,分屏效果,一页展示不下:

下一页:空格

上一页: b

到尾页了 ,显示END

退出:q

日志展示方式:

【1】方式1:git log ---》分页

【2】方式2:git log --pretty=onelint

【3】方式3:git --oneline

【4】方式4:git reflog

多了信息:HEAD@{数字}

这个数字的含义:指针回到当前这个历史版本需要走多少步

reset命令

reset命令:前进或者后退历史版本

复制:在终端中选中就是复制了

粘贴: 右键:paste

hard参数/mixed参数/soft参数

【1】hard参数:

git reset --hard [索引]

本地库的指针移动的同时,重置暂存区,重置工作区

【2】mixed参数:

本地库的指针移动的同时,重置暂存区,但是工作区不动

【3】soft参数:

本地库的指针移动的时候,暂存区,工作区都不动

总结:以后用的多的就是 第一种hard参数

删除文件_找回本地库删除的文件

【1】新建 一个Test2.txt文件

【2】将它add到暂存区中

【3】再通过commit提交到本地库

【4】删除工作区中的Test2.txt

【5】将删除操作同步到暂存区:

【6】将删除操作同步到本地库:

【7】查看日志:

【8】找回本地库中删除的文件,实际上就是将历史版本切换到刚才添加文件的那个版本即可:

找回暂存区删除的文件

【1】删除工作区数据:

【2】同步到缓存区:

【3】后悔了,恢复暂存区中数据:

diff命令

【1】先创建一个文件,添加到暂存区,再提交到本地库:

【2】更改工作区中Test3.txt中内容,增加内容:

导致:工作区 和 暂存区 不一致,比对:

总结: git diff [文件名] ---》 将工作区中的文件和暂存区中文件进行比较

多个文件的比对:

总结:git diff --->比较工作区中和暂存区中 所有文件的差异

比较暂存区和本地库中差别:

git diff [历史版本][文件名] ---》比较暂存区和本地库中内容

分支

什么是分支

【1】什么是分支:

在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。

【2】通过一张图展示分支:

【3】分支的好处:

同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率

如果有一个分支功能开发失败,直接删除这个分支就可以了,不会对其他分支产生任何影响。

操作分支

查看,创建,切换分支

【1】在工作区创建一个Test4.txt文件,然后提交到暂存区,提交到本地库:

【2】查看分支:

【3】创建分支:

再查看:

【4】切换分支:

冲突问题,如何解决冲突题

【1】进入branch01分支,增加内容:

【2】将分支切换到master:

然后在主分支下 加入内容:

【3】再次切换到branch01分支查看:

【4】将branch01分支 合并到 主分支 :

(1)进入主分支:

(2)将branch01中的内容和主分支内容进行合并:

查看文件:出现冲突:

解决:

公司内部商议解决,或者自己决定 人为决定,留下想要的即可:

将工作区中内容添加到暂存区:

然后进行commit操作:

GitHub账号注册

官网:https://github.com/

回顾本地库和远程库交互方式

初始化本地库

创建远程库

【1】创建远程库

【2】录入信息:

【3】完成状态:

在本地创建远程库地址的别名

远程库的地址:

点击进入:

远程库地址比较长,每次复制比较麻烦

https://github.com/zhaoshanshan3366/GitResp2.git

在Git本地将地址保存,通过别名

查看别名:

起别名:

推送操作

推送成功以后,查看自己的远程库:

克隆操作

远程库地址复制:

克隆操作:

克隆操作可以帮我们完成:

(1)初始化本地库

(2)将远程库内容完整的克隆到本地

(3)替我们创建远程库的别名:

邀请加入团队,push操作

【1】更新本地库信息:

【2】push内容到远程库中去:

发现可以直接push进去,并没有让我录入账号密码,或者也没有提示错误 - --》结果 很诡异

原因:git使用的时候在本地有缓存:

将缓存删除:

现在再次重新push,发现出错了:

必须要加入团队:

登录项目经理的账号,邀请普通成员:

登录被邀请者的账号,接收邀请:(在地址栏录入邀请链接即可:https://github.com/zhaoshanshan3366/GitResp2/invitations)

远程库修改的拉取操作

【1】拉取操作pull操作,相当于 fetch+merge

【2】项目经理先先确认远程库内容是否更新了:

【3】项目经理进行拉取:

(1)先是抓取操作:fetch:

在抓取操作执行后,只是将远程库的内容下载到本地,但是工作区中的文件并没有更新。工作区中还是原先的内容:

抓取后可以去远程库看看内容是否正确:

然后发现内容都正确,就可以进行合并操作了:

合并之前应该将分支切换回来:

(2)进行合并:merge:

远程库修改的拉取操作2

远程库的拉取可以直接利用pull命令来完成:

fetch+merge操作:---》为了保险,慎重

pull --->代码简单,省事

协同开发合作时冲突的解决办法

【1】

向远程库推送数据:

【2】

做了一个拉取操作:

到这里为止,现在远程合作没有任何问题。

现在操作同一个文件的同一个位置的时候,就会引起冲突:

【3】

再次做了推送操作:

改动位置:

【4】

改动Test.txt中内容,然后进行推送:

发现 推送失败!

在冲突的情况下,先应该拉取下来,然后修改冲突,然后再推送到远程服务器:

先拉取:

查看冲突:

人为解决这个冲突:(该删的删,该留的留)

解决完冲突以后,向服务器推送:

推送:

解决了冲突问题:

回顾跨团队合作交互方式

跨团队合作

【1】得到远程库的地址:

地址:

https://github.com/zhaoshanshan3366/GitResp2.git

【2】进行fork操作:

进入到账号后:复制地址:https://github.com/zhaoshanshan3366/GitResp2.git

然后点击下面的fork操作:

【3】然后就可以克隆到本地,并且进行修改:

然后更改数据:添加到暂存区,然后提交到本地库,然后push到远程库:

【4】进行pullrequest操作:

【5】进行审核操作:

可以互相留言:

查看具体提交的内容:

确定通过以后,可以进行合并:

SSH免密登录

免密操作:

【1】进入用户的主目录中:

【2】执行命令,生成一个.ssh的目录:

keygen --- > keygeneration

注意:C要大写

后面的邮箱,是你的github注册的账号的时候对应的邮箱

三次回车确认默认值即可

发现在.ssh目录下有两个文件:

【3】打开id_rad.pub文件,将里面的内容进行复制操作:

ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABgQCqiZEbHnyAbBFzx/OFWUyxlL2NUyf//1NdmvYfi+x09AENYVDXcPc2CLiUSYpUcRj7eWuLiIBuzYO/0aYTYgSLPMKAKn8WSLipd7S+vqRsxRLZYna+WvfGvYXc6DexenZlgoMzQe7CBE4IaL1eG4IAvAbjXSF0pq7OJKkcb5L8lQ0HlU9p+eC7WluoW+ZThym/Au8lscDtUVE/I9IwAgvUXB4TxmP7aYD1YCrAUuQ+6mlgh+Tqqb4aWyHPIvtXidkWOPS2pZ7zGi+1cQE6UFxxNlIrH5tczmOKOZ2XKemFWMFc4S89O1y9M9pfOFZZ5F4gbQf6PmrbB4eSyYmWT1TH6FBlB9eaw8v8w186qvqbUKHIc450/hZuQ9LehhdHDgkT86uBAEkXBwwHvVsIM61AD7TC0E1uMw0/Cf4I64vZOVF0/pE6rjs+0LqvF/mtq4aM1riIkSKqFFEm5sx2MsCAJrSBTr3uQFufAMA4VmANH6YAtTwgIJtV5AI16XQlY/8=chinazss@126.com

【4】打开github账号:

【5】生成密钥以后,就可以正常进行push操作了:

对ssh远程地址起别名:

展示别名:

创建一个文件:

添加到暂存区,提交到本地库,然后push到远程库(地址用的是ssh方式的地址)

ssh方式好处: 不用每次都进行身份验证

缺陷:只能针对一个账号

IDEA集成Git

IDEA集成Git:

本地库的初始化操作:

本地库初始化完成了,生成了.git目录:

添加到暂存区,再提交到本地库操作; add+commit:

当你更改内容以后,前面跟本地库内容不一致的地方会显示绿色:

本地库和远程库的交互

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并。

假如我们的源是origin,分支是master,那么我们需要这样写 git pullorigin master --allow-unrelated-histories

这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。如果使用本文的方法还无法提交,需要看一下是不是发生了冲突,解决冲突再提交

push推送: git push -u origin master -f

到这里 远程库和本地库就可以进行交互了。

在IDEA中进行推送:

一般在开发中先pull操作,再push操作,不会直接进行push操作!!

使用IDEA克隆远程库到本地

利用IDEA进行克隆项目:

克隆到本地后:

这个目录既变成了一个本地仓库,又变成了工作空间。

解决冲突

【1】在你push以后,有冲突的时候提示合并操作:

合并:

如何避免冲突

【1】团队开发的时候避免在一个文件中改代码

【2】在修改一个文件前,在push之前,先pull操作

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

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

相关文章

BGP基础实验(华为)

题目: 思路: 该题分为三个AS区域,并且三个区别间分别使用不同的路由,EBGP,IBGP,OSFP连接等,其中AS1与AS2之间使用的是EBGP连接,这点需要EBGP的命令来进行实现,AS2中使用的OSPF,AS2&a…

不规范使用ThreadLocal导致的bug,说多了都是泪

ThreadLocal一般用于线程间的数据隔离,通过将数据缓存在ThreadLocal中,可以极大的提升性能。但是,如果错误的使用Threadlocal,可能会引起不可预期的bug,以及造成内存泄露。 因为线程重用导致的信息错乱的bug 有时我们…

一起自学SLAM算法:11.2 环境感知

连载文章,长期更新,欢迎关注: 环境感知就是机器人利用传感器获取自身及环境状态信息的过程,自主导航机器人的环境感知主要包括实时定位、环境建模、语义理解等,下面具体讨论。 11.2.1 实时定位 定位其实就是在回答图…

BI技巧丨近两年及当年月份数据汇总

BOSS:白茶,有个需求,不知道你能不能做? 白茶:不能! BOSS:我还没说呢,小伙砸!做了加钱! 白茶:BOSS您吩咐! BOSS:是这样的&a…

C语言开发基于RT-Thread家庭安全环境检测系统源码,RTT设计大赛

基于RT-Thread家庭安全环境检测 简介 基于RT-Thread和中蓝讯科的AB32VG1开发板实现的家庭安全检测功能,主要包含如下功能: 1、基于RT-Thread操作系统的按键组件,音频播放组件等; 2、基于AB32VG1开发板的语音播放功能&#xff1b…

BlackByte勒索软件开始使用新的数据泄露工具ExByte

BlackByte 勒索软件在 2021 年被首次发现,随后不断发现其变种。BlackByte 勒索软件不仅使用双重勒索,还运营着勒索软件即服务(RaaS)。最近,研究人员发现 BlackByte 开始使用名为 ExByte 的数据泄露工具来窃取受害者的数…

什么品牌的蓝牙耳机音质好?四款高音质蓝牙耳机推荐

随着时代的发展,蓝牙耳机的使用频率越来越高,在日常生活中随处可见的戴蓝牙耳机的人。或是听音乐,或是追剧,或是玩游戏等等。在现如今众多的蓝牙耳机品牌当中,什么品牌的蓝牙耳机音质好?下面,我…

基于Yolo实现的交通路况汽车识别 附完整代码(使用Keras框架)

一、问题描述 假设你现在在做自动驾驶的汽车,你想着首先应该做一个汽车检测系统,为了搜集数据,你已经在你的汽车前引擎盖上安装了一个照相机,在你开车的时候它会每隔几秒拍摄一次前方的道路。 您已经将所有这些图像收集到一个文件夹中,并通过在您找到的每辆车周围画边界框…

BlackStone:一款功能强大的渗透测试报告工具

关于BlackStone BlackStone是一款功能强大的渗透测试报告工具,该项目可以帮助广大研究人员自动起草和提交渗透测试或安全研究审计报告。该工具允许我们在数据库中提交和存储渗透测试过程中发现的漏洞,并通过内部和外部审计来对漏洞进行分类。除此之外&a…

界面控件DevExpress WinForm的先进技术——服务器和即时反馈模式

DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任…

vue中如何优雅的实现数字递增特效

需求 前几天项目开发中遇到一个需求,需要在数字更新时,实现其动态递增的效果 并且,在数字大于10000时,将单位进行转换,如数字大于10000时,单位从m变为万m 我们以vue中开发为例,一一实现下这两个…

多目标跟踪(MOT)入门介绍

1. 相关方向 这些是我所了解的多目标跟踪(MOT)的一些相关方向。其中单目标跟踪(VOT/SOT)、目标检测(detection)、行人重识别(Re-ID)都是非常热门的方向。而偏视频的相关方向就比较冷…

java 随机数种子 java设置随机数种子教程 java随机数种子怎么设置

我们常用的随机数生成就是Math.random();java.util.Random类有两种方式构建方式:带种子和不带种子import java.util.Random;不带种子:不带种子将会返回随机的数字,每次运行结果不一样public class RandomTest {public static void…

分享149个ASP源码,总有一款适合您

ASP源码 分享149个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 149个ASP源码下载链接:https://pan.baidu.com/s/173AhCXJgM5AvPqBw-la60w?pwdqk9j 提取码&#x…

如何在UI自动化测试中加入REST API的操作

1、问题 当我们描述一个“好的自动化测试用例”时,经常出现标准是: 精确 自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。 独立 自动化测试用例不应该受测试套件中任何其他测…

SVN服务端使用教程

前言 正式进入公司项目后,我们需要和同事进行协同开发,此时代码管理工具是必不可少的,目前常用的两款工具是:SVN 和 Git。本人因为要搭建一个自动化测试的框架,对SVN和Git都不熟悉,在调研后选择了操作更为…

组合选择器

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>组合选择器</title> <style type"text/css"> /* 多个选择器组合在一起中间用逗号","隔开就形成了组合选择器&…

销售过程管理系统对企业的好处是什么

当线索转化成销售机会后&#xff0c;要不断地跟进才有可能成交。但是这个过程时间跨度长&#xff0c;涉及人员、要素过多&#xff0c;销售过程中经常会遇到很多的问题。不少企业使用CRM销售管理系统把控销售过程。下面来说说&#xff0c;为什么企业需要销售过程管理系统? 销售…

【Mysql】X档案:Mysql 服务和Navicat客户端的安装与使用(超详细步骤)

Mysql 服务和Navicat客户端的安装与使用&#xff08;超详细步骤&#xff09;一、Mysql 安装配置1、下载安装2、配置环境变量3、设置服务自动启动二、Mysql Cli 使用1、连接 Mysql2、创建数据库3、创建数据表4、数据表操作5、删除数据库对象三、Navicat 安装1、下载2、安装3、FR…

Android 实现隐私政策提示弹窗(完整版)

android studio版本&#xff1a;2021.2.1例程名称&#xff1a;pravicydialog功能&#xff1a;1、启动app后弹窗隐私协议2、屏蔽返回键3、再次启动不再显示隐私协议。本例程的绝大部分代码来自下面链接&#xff0c;因为本人改了一些&#xff0c;增加了一些功能&#xff0c;所以不…