Git超级详细使用

news2024/12/24 10:01:38

一、概述

1.1 、git工作流程

在这里插入图片描述

  • 命令如下:
1. clone (克隆):从远程仓库中克隆代码到本地仓库
2. checkout(检出) :从本地仓库中检出一个仓库分支然后进行修订add (添加):在提交前先将代码提交到暂存区
3. commit(提交)︰提交到本地仓库。本地仓库中保存修改的各个历史版本
4. fetch (抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
5. pull (拉取)︰从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
6. push(推送)︰修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

二、Git安装和常用指令

2.1、常用命令

  • 本篇博客的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举:
命令作用
ls/ll查看当前目录
cat查看文件内容
touch创建文件
vivi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编辑器)

2.2、 git环境配置

  1. 安装:官网:https://git-scm.com/downloads
  2. 在官网下载安装包之后直接安装即可
  3. 安装成功会有以下显示:

    在这里插入图片描述

备注:

Git GUI: Git提供的图形界面工具

Git Bash: Git提供的命令行工具(可在此输入Linux指令,相当于小的Linux命令行工具)

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用广信息

2.2.1 、基本配置

  1. 打开Git Bash
  2. 设置用户信息
$ git config --global user.name "mannor"
$ git config --global user.email "1626467682@qq.com"
  1. 查看配置信息
$ git config --global user.name 
$ git config --global user.email 

2.2.2 、为常用的指令配置别名

  1. 打开用户目录,创建.bashrc文件(部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行touch ~/.bashrc)
$ touch ~/.bashrc   

//  ~ :指的是当前目录下
// / :后面接的文件名

  1. .bashrc文件中输入:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit '
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  1. 打开gitBash,执行:
source ~/.bashrc

2.2.3 、解决GitBash乱码的问题

法一: 不要输入中文即可
法二:

  1. 打开GitBash执行下面命令
git config --global core.quotepath false
  1. ${git_home}/etc/bash.bashrc文件最后加入下面两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

2.3 、获取本地仓库

2.3.1、 具体操作

要使用git对我们的代码进行 版本控制,首先就需要获得本地仓库。

  1. 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开Git bash窗口
  3. 执行命令git init
  4. 如果创建成功后可在文件夹下看到隐藏的.git目录。
    (C:\Users\redazs\AppData\Roaming\Typora\typora-user-images\image-20230713113143204.png)]

2.4 、基础操作指令

2.4.1、 git的基本操作

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

实际操作演示:

  1. 在本地仓库创建新的文件(演示用):

在这里插入图片描述

  1. 使用git add指令添加工作区的文件到暂存区(修改的文件也相同的操作):

在这里插入图片描述

  1. 使用git commit 指令进行提交,-m后面跟上提交的描述:

在这里插入图片描述

  1. 查看日志git log

在这里插入图片描述

2.4.2、查看日志的指令log

  • 作用:查看提交的日志
  • 命令形式:git log [options]
    • options:
      • –all 显示所有分支
      • –pretty=oneline将提交信息显示为一行
      • –abbrev-commit使得输出的commitld更简短(简短的指令也是唯一有效的)
      • –graph 以图的形式显示

在这里插入图片描述

–graph指令可以展示分支的提交情况,合并分支详情等。诸如:

在这里插入图片描述

由于指令太长,可以为指令设置别名,详情请见1.2.1有描述。

2.4.3、 版本回退

  • 命令形式:git resit --hard commitID

    • commitID可以使用git log查询,上一小节有介绍。

在这里插入图片描述

此时,我原本提交在text中的数据文本就已经回退成功了,使用的哪一个commitID就回退到那一个版本。

tips:在命令行中复制可以双击鼠标左键实现,粘贴可以用滚轮按压实现。

  • 如何查看已经删除的记录?

    • git reflog
    • 这个指令可以看到已经删除的提交记录

在这里插入图片描述

再次使用set reset指令就可以恢复想要的那个commit版本(版本回退)。

2.4.4、忽略提交.gitignore

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*

现在在idea中开发是由ignore的插件,不用自己配置了。

2.5 、分支

凡乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

2.5.1、 查着本地分支

  • 命令: git branch>

在这里插入图片描述

2.5.2、 创建本地分支

  • 命令: git branch分支名

在这里插入图片描述

2.5.3、 切换分支(checkout)

  • 命令: git checkout分支名

    我们还可以直接切换到一个不存在的分支(创建并切换)

    命令: git checkout -b 分支名

在这里插入图片描述

2.5.4、 合并分支(merge)

一个分支上的提交可以合并到另一个分支

  • 命令: git merge分支名称

分别使用两个分支创建文件提交之后的情况:

在这里插入图片描述

  1. 切换到master分支
  2. 键入git commit demo1
    在这里插入图片描述

在输入指令后会出现上述指令,使用组合键“ESC+shift+:”,输入wq回车即可退出。

  1. 再次查看当前分支状态,以及合并到了master

在这里插入图片描述

2.5.5、 删除分支

不能删除当前分支,只能删除其他分支

  • git branch -d b1 删除分支时,需要做各种检查
  • git branch -D b1不做任何检查,强制删除

在这里插入图片描述

2.5.6、分支合并冲突

当两个分支同时对一个文件进行操作时,合并分支时就会产生冲突:

在这里插入图片描述

原本的txt数据也发生了变化:

在这里插入图片描述

方法:手动修改成想要的样子,再添加、提交、再进行合并操作。

在这里插入图片描述

在这里插入图片描述

2.5.7、Git在开发中使用的流程

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

在开发中,一般有如下分支使用原则与流程:

  • mastler(生产)分支

    线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;.

  • develop (开发)分支

    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。

  • feature/xxxx分支

    从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。

  • hotfix/xxxx分支

    从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。

  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

在这里插入图片描述

三、远程仓库

3.1、常用的托管服务(远程仓库)

	前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHube码云、GitLab等。
	gitHub(地址: https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名gitHub。
	码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
	GitLab(地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。

3.2、注册码云(gitee)

gitee是国内的网站,github站点是在国外,访问不方便,基于自己的情况使用哪一款。

3.3、创建仓库

因为本篇博客演示的是如何将本地仓库上传到gitee上,所以填写这三项即可:

在这里插入图片描述

创建后:

在这里插入图片描述

需要将仓库设置成开源的,那就只有将仓库建成之后在设置中更改。

3.4、建立远程连接

建立远程连接的方式有很多种 ,任意选择一种即可

3.4.1、复制SSH的url

在这里插入图片描述

3.4.2、配置SSH公钥

  1. 生成SSH公钥

    ssh-keygen -t rsa
    
  2. 不断回车(如果以前存在公钥,则会自动覆盖)

在这里插入图片描述

  1. Gitee设置账户公共钥

    • 获取公钥,将公钥复制下来(选中即复制)

      cat  ~/.ssh/id_rsa.pub
      
    • 在Gitee中点击设置···步骤如下:

在这里插入图片描述

  • 将复制的公钥粘贴下来 ,取个标题名,点击确定。
  1. 验证是否成功

    • ssh -T git@gitee.com
      

    -在这里插入图片描述

现在就已经认证成功了。

3.5、操作远程仓库

3.5.1、连接远程仓库

git remote add origin [ssh的url]

在这里插入图片描述

3.5.2、推送代码到远程仓库

  • 命令:
$ git push [-f] [--set-upstream][远端名称[本地分支名][:远端分支名]]
  • 如果远程分支名和本地分支名称相同,则可以只写本地分支
    • git push origin master
  • -f 表示强制覆盖
  • –set-upstream推送到远端的同时并且建立起和远端分支的关联关系。
    • git push --set-upstream origin master
  • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
    • git pushmaster分支推送到已关联的远端分支。

在这里插入图片描述

3.5.3、本地分支与远程分支的关联关系

  • 查看关联关系我们可以使用一下命令
git branch -vv

3.5.4、从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地。

  • 命令:

    git clone<仓库路径>[本地目录]
    
    • 本地目录可以省略,会自动生成一个目录

在这里插入图片描述

3.5.5、从远程仓库的拉取和抓取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取命令:

    git fetch [remote name] [branch name]
    
    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支。
  • 拉取命令:

    git pull [remote name] [branch name]
    
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

3.5.6、解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。

A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示。

在这里插入图片描述

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同,在此不再赘述。

总而言之,当两个用户同时修改了同一个文件并且推送的时候,首先需要将两个人的分支进行合并,然后再进行推送。

四、在idea中使用git

4.1、 在idea中配置git

安装好Intelli] IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选项:

在这里插入图片描述

4.2、在Idea中操作git

  1. 打开你需要上传到仓库的项目,在上面找到VCS(版本控制),选择引入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GCmY1Q7p-1689310054555)(C:\Users\redazs\AppData\Roaming\Typora\typora-user-images\image-20230714111258922.png)]

  1. 填入你远程仓库的URL

在这里插入图片描述

  1. 然后选择 import,导入你需要不变成仓库的项目(当前项目)

在这里插入图片描述

现在的idea很智能,在本地初始化git(git init)之后打开idea就已经是链接好的

  1. 现在就可以进行操作了,commit ,update ,pull等。

在这里插入图片描述

  1. 点击commit,并且点击commit and push

在这里插入图片描述

  1. 填写url,输入密码,如果刚刚填写远端成功就不用再写url

在这里插入图片描述

  1. push操作
    在这里插入图片描述

  2. 等待即可。

4.3、在idea中克隆仓库

如下进行操作,然后填写URL即可,随即克隆成功。
在这里插入图片描述

4.3、更新冲突的解决

当两个人同时对一个文件进行操作的时候,后push的人是没法进行push的

  • 操作:先进行pull(update project),再进行冲突的解决(基于idea的图形化操作界面,操作较为简单,在此就不再赘述)

在这里插入图片描述

4.4、idea中分支管理

在这里插入图片描述

4.5、idea中的合并冲突

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhJROI62-1689310054557)(C:\Users\redazs\AppData\Roaming\Typora\typora-user-images\image-20230714122822271.png)]

附1:细节

  1. 切换分支前先提交本地的修改(不然会导致代码丢失)

  2. 代码及时提交,提交过了就不会丢

  3. 遇到任何问题都不要删除文件目录,找会的人来弄

附2:idea集成gitBash作为Terminal

修改为GitBush的路径就可以

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5U30iHI-1689310054557)(C:\Users\redazs\AppData\Roaming\Typora\typora-user-images\image-20230714123538457.png)]

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

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

相关文章

“管理Layui树形图,提高页面交互性与可视化效果“

标题&#xff1a;管理Layui树形图&#xff0c;提高页面交互性与可视化效果 Layui树形图简介一、引入Layui和jQuery库&#xff1a;二、HTML结构准备&#xff1a;三、初始化树形图&#xff1a;四、配置树形图的其他属性和事件&#xff1a;4.1 实体类4.2 PermissionDao方法4.3 Per…

【crash】浮点除0堆损坏

摘要&#xff1a;工作中遇到一个crash&#xff0c;其现象真实的crash原因差别比较大&#xff0c;和我自身原本了解的只是冲突&#xff0c;因此在本片文档中简单描述下。关键字&#xff1a;除0、IEEE754 1 前情提要 QA测试过程发现一个比较奇怪的crash&#xff0c;只会在特定机…

python爬虫-获取headers(报文头)关键参数实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;请求页面&#xff0c;得到响应。建议首次请求时headers内容都带着&#xff0c;调试…

OpenCV入坑第一天:图像的基础操作

我们都知道&#xff0c;OpenCV能够帮助我们处理视频和图像&#xff0c;咱们在图像处理中&#xff0c;除了Pillow库之外&#xff0c;最经常用到的也是它了。那么现在咱们就正式入坑OpenCV for Python&#xff0c;一起来感受一下OpenCV的魅力吧&#xff01; 文章目录 读取图像 im…

GAMES101笔记 Lecture11 Geometry 2(Curces and Surfaces)

目录 Explicit Representations in Computer Graphics(计算机图形学中的显式几何表示)Point Cloud(点云)Polygon Mesh(多边形网格)The Wavefront Object File(.obj) Format(OBJ格式文件) Curves(曲线)Bezier Curves(贝塞尔曲线)Defining Cubic Bezier Curve With Tangents(定义…

el-checkbox和el-switch绑定一个Number值

因为我们对状态这种字段&#xff0c;后端一般返回的是Number值。0为正常&#xff0c;1为停用。 el-switch&#xff0c;el-checkbox这种控件呢&#xff0c;一般是绑定布尔值的。原来我的做法是使用value和change事件来做转换&#xff0c;而不是v-model。但是后来发现&#xff0c…

row_number 和 cte 使用实例:按照队列进行数据抵消

row_number 和 cte 使用实例:按照队列进行数据抵消 问题来源模拟数据使用 cte使用sum结合开窗函数结合 row_number 最终实现完整的模拟代码小结问题来源 今天无聊的翻了翻以前的论坛的帖子。。。嗯,想把一些没有什么价值的消息记录给删除掉,就是那些专家分获取记录。 毕竟,…

二次元少女-InsCode Stable Diffusion 美图活动一期

一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置&#xff1a; 模型版本&#xff1a;chilloutmix_NiPrunedFp32Fix.safetensors 采样方法(Sampler)Sampling method&#xff1a;DPM SDE …

Elasticsearch--客户端

Es客户端 语言无关 ​ java最常用的客户端是Java Client、Java Rest Client、Java Transport Client Java Client 从es7.17开始&#xff0c;官方推出Java Client&#xff0c;并且将Java Rest Client标为Deprecated&#xff08;过期&#xff09; 要求jdk至少要jdk8 具体用法…

大模型技术发展概述 -(四)

文本内容参考论文《A Survey of Large Language Models》 论文标题&#xff1a;A Survey of Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2303.18223v10.pdf 大模型技术发展概述 -&#xff08;四&#xff09; 6. 使用方法6.1 上下文学习6.1.1 提示形式6.…

网络套接字编程(三)(HTTP)

gitee仓库&#xff1a;https://gitee.com/WangZihao64/linux/tree/master/CalTcp 一、重谈协议 协议是一种“约定”&#xff0c;这种约定是双方都知道的。有了一致的约定&#xff0c;双方才能够正常地进行通信。协议在网络的第一篇博客中也提到过&#xff0c;协议是双方进行通…

uniapp中H5定位功能实现

1.要实现该功能 必须使用vue-jsonp进行跨域 JSONP是一种跨域数据请求的解决方案&#xff0c;它使用script元素来请求数据&#xff0c;再利用回调函数将数据传回页面。 Vue框架提供了对JSONP的支持&#xff0c;可以方便地在Vue应用中使用JSONP获取跨域数据。下面我们来了解一下…

【Java】StringBuffer和StringBuilder

共同点 他们都是可变的&#xff0c;在每次进行修改操作时&#xff0c;都不会产生新的对象&#xff0c;所以在进行修改的时候&#xff0c;尽量使用这两种类型的字符串 不同点 StringBuffer在单线程中效率高 StringBuilder用于多线程确保安全性 测试代码 public class test …

keepalived安装配置详解

文章目录 高可用介绍keepalived安装、使用vip漂移抓包脑裂脑裂有没有危害&#xff1f;如果有危害对业务有什么影响&#xff1f; keepalived架构双vip架构 Healthcheck实现 notifyVRRP选举格式 高可用 介绍 高可用性&#xff08;High Availability&#xff09;是指系统或服务能…

Linux的locale本地化配置

Linux的locale本地化配置 locale简介localectl常用操作语言环境键盘布局 常见问题:配置语言环境报错Linux系统locale(UTF-8)报错最小化自动安装的Centos7修改完整中文显示 locale简介 参考: http://m.blog.chinaunix.net/uid-20621049-id-3427444.html locale把按照所涉及到的…

Python调用ImageMagick生成PDF文件缩略图

使用Python调用ImageMagick生成PDF文件缩略图 Imagemagick使用Ghostscript作为其依赖项之一&#xff0c;以便能够处理和转换PDF相关的图像。 准备 安装Ghostscript&#xff0c;网站安装ImageMagick&#xff0c;网站 安装完毕后&#xff0c;需要自行配置环境路径 脚本 使用示…

灌区信息化智能测控一体化闸门系统解决方案

一、方案背景 闸门是节水灌溉工程中重要组成部分。在农田灌区中&#xff0c;一方面存在传统手摇闸门&#xff0c;未能实现自动化、数字化&#xff0c;另一方面部分灌区闸站虽然部分实现了自动化控制&#xff0c;但是由于闸站较多&#xff0c;有些位置较为偏僻&#xff0c;部分水…

网络数据安全风险评估实施指引(一)

近日&#xff0c;全国信息安全标准化技术委员会发布了《网络安全标准实践指南 网络数据安全风险评估实施指引》&#xff08;TC260-PG-20231A v1.0-202305&#xff09;&#xff0c;旨在响应《数据安全法》要求&#xff0c;落实重要数据处理过程风险评估&#xff0c;衔接已发布的…

前端开发中的微服务架构设计

前端服务化和小程序容器技术为前端应用带来了更好的组织结构、可维护性和可扩展性。这些技术的应用将促进前端开发的创新和发展&#xff0c;使团队能够更好地应对复杂的前端需求和业务挑战。通过将前端视为一个服务化的架构&#xff0c;我们能够构建出更强大、可靠且可持续的前…

OpenCv (C++) 使用矩形 Rect 覆盖图像中某个区域

文章目录 1. 使用矩形将图像中某个区域置为黑色2. cv::Rect 类介绍 1. 使用矩形将图像中某个区域置为黑色 推荐参考博客&#xff1a;OpenCV实现将任意形状ROI区域置黑&#xff08;多边形区域置黑&#xff09; 比较常用的是使用 Rect 矩形实现该功能&#xff0c;代码如下&…