当前位置: 首页 > news >正文

Git使用教程

Git

目标

Git简介【了解】

使用Git管理文件版本【重点】

远程仓库使用【掌握】

分支管理【重点】

远程仓库【掌握】

一、Git简介

1、版本控制系统简介

1.1、版本控制前生今世

版本控制系统Version Control Systems,简称 VCS是将『什么时候、谁、对什么文件做了怎样的修改』这样的信息以版本的形式保存并进行管理的系统。简单来说,版本控制系统会去记录它所管理的文件的『历史版本』。

  • 本地版本控制系统

    本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。但是并不能满足不能团队,在不同系统上协同工作。于是,集中化的版本控制系统诞生

在这里插入图片描述

  • 集中化的版本控制系统

    每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。但是缺点也显然易见,若中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。于是分布式版本控制系统面世了

在这里插入图片描述

  • 分布式版本控制系统

    在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

在这里插入图片描述

Git 并非唯一的版本控制系统,它的前辈是 Subversion 。2014 年 Git 的市场占有率首次超过 Subversion ,成为主流。

Git 相较于 Subversion 的先进之处在于:

  1. Subversion 中的版本信息仅存在于中央仓库,而 Git 中所有的本地库中都有完整的历史版本信息。

  2. Subversion 中的 “分支” 很重,创建分支、删除分支、合并分支等分支相关操作很慢,而 Git 中的分支很轻,分支操作是 Git 的特性

1.2、 Git的安装

​ 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。由于开发机大多数情况都是windows,所以本教程只讲解windows下的git的安装及使用

a、安装git
  • 下载git

    官方下载地址:https://git-scm.com/download

​ 淘宝下载地址:https://npm.taobao.org/mirrors/git-for-windows/

在这里插入图片描述

  • 安装git服务端

    在这里插入图片描述

    ​ 图形界面如下:

在这里插入图片描述

b、Git 的配置

在使用 git 之前需要使用 config 命令配置下用户名和用户邮箱:

git config --global user.name "zhangsan"
git config --global user.email "zh"
git config --global push.default simple
git config --global core.editor notepad

这些信息写到全局配置文件通常在【C:\Users\Administrator.gitconfig】,Administrator不同电脑可能有所区别,重申一遍,你只需要做一次这个设置。如果你传递了 --global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项

在使用 git 之前创建 SSH Key,未来会使用到:

ssh-keygen -t rsa -b 4096 -C "备注"一路回车cat ~/.ssh/id_rsa.pub

二,本地仓库

在这里插入图片描述

git init 创建本地仓库

git add 从工作区提交到暂存区

git add stu.java
git add .  -- 提交所有文件

git commit 从暂存区提交到本地仓库

git commit -m "提交注释"
git status --查询文件状态
git log    -- 查看文件日志
git reset  --hard  commitID  --版本切换
git reflog --查看操作记录

二、GIT分支操作

1、关于分支

版本的提交不可能『依次进行,以便形成一条直线型的提交历史记录』,原因有二:

  • 并行式开发:有两个以上的开发者在对同一个项目进行并行式开发。
版本库 1            版本库2
A <--- B <--- C     A <--- B <--- DC/
A <--- B  \D
  • 修复旧版本中的 bug:一方面要修复旧版本中的 bug,而与此同时又要创建和发布新的版本。
前期
A <--- B <--- C <--- D修复 bug 之后C <--- D/
A <--- B  \E

分支可以看作是开发过程当中的并行线,我们可以把提交图想象成游泳池中的泳道:

         E              release/
A <--- B <--- C <--- D  master\F       test

在一个 Git 版本库中,总是唯一存在着一个『活动分支』(也叫『当前分支』)。我们可以用 branch 命令(不带选项)来列出所有的分支。Git 会用星号(*)凸显出当前活动分支。

2. 分支基本操作

a、查看分支

通过 git branch 可以看到 Git 仓库的所有分支。

当执行 git init 指令的时候,Git 就会自动产生一个名为 master 的分支:主分支。主分支是默认的、初始的。

b、创建分支

创建新的分支,也是使用 git branch 命令。

git branch 新分支名 [从当前分支的 Commit]

如果省略 Commit,那么就是从当前分支的 HEAD 分化出新分支。

在这里插入图片描述

c、切换分支

建立分支后,可以通过 git checkout 命令来切换当前分支:

git checkout <分支名>

有个简单的办法可以创建新分支并切换:

git checkout -b <新分支名> [Commit节点]

(即它总是在当前分支上的)

在图形化界面中,直接双击分支名称即可完成切换

d、删除分支

删除分支使用:

git branch -d <被删除分支名>

如果在删除一个分支时,自己还未转移到其他分支上,git 会拒绝删除操作。如果坚持要删除的话,则使用 -D 选项替换 -d 选项。

一般情况下,分支应该合并到另一个分支。如果要删除还未合并的分支,Git 会显示错误信息,并拒绝删除。当然你也通过 -D 选项来强制删除

3、分支合并

在大多数情况下,项目的分支都会被合并到主(master)分支。合并项目分支需要使用 git merge 命令:

git merge <另一个分支名>

一般都是其他分支合并到master分支,先切换到master 分支,在执行git merge dev01,意思把dev01 代码合并到master上

4、冲突

Git 的设计目标之一就是为了能够让开发者之间的分布式协作变得尽可能容易一些。因此从很大程度上来说,merge 命令能自动对分支进行合并,完全不需要用户交互。

当两个分支对于同一个文件做出了不同的操作时,可能会出现冲突,而且此时,Git 无法自动 “帮” 你合并。最常见的冲突情况有 2 种:

  • 两个分支对于同一个文件的同一个位置做出了修改。那么你在合并这两个分支时,Git 无法自己决定 “合并后保留的是哪个分支上的内容(而废弃另一个),亦或者是两个分支上的都要保留” ?这种情况,就需要人来裁决。

  • 一个分支对一个文件执行了删除操作,而另一个分支上这个文件还在,仅仅只是内容有变动。那么你在合并这两个分支时,Git 无法自己决定 “合并后这个文件到底是应该删除,还是留着” ?这种情况也需要人来裁决。

补充一点,并非对于同一个文件的修改,都会造成冲突。比如,如果两个分支是对同一个文件的不同位置做出了修改(注意和上述第一种情况的区别),Git 自己也会自动合并:合并后的内容会同时采纳两个分支上的操作。

当 Git 遇到了自身无法解决的冲突时,就会显示以下错误信息。

$ git merge a-branchAuto-merging foo.txt
CONFLICT (content): Merge conflict in foo.txt
Automatic merge failed; fix conflicts and then commit the result.

此时,如果执行 git status 命令,会看到 git 提醒你,它无法完成自动合并,需要你手动进行编辑,并且要求你在编辑之后,执行 git commit

$ git statusOn branch master
You have unmerged paths.(fix conflicts and run "git commit")Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   foo.txtno changes added to commit (use "git add" and/or "git commit -a")

冲突标志通常会描述两组修改。首先这些被修改的行在当前分支(HEAD)中的内容。接下来又列出了他们在另外一个分支的内容,例如:

第一次修改
第二次修改

手动解决完冲突以后,运行 git add 命令把相关文件添加到暂存区。继续执行 git merge --continue 命令编辑新生成的提交的 log 信息。然后 merge 完成。

四、远程仓库

在这里插入图片描述

通常我们并不常亲自建立远程仓库,而是委托给『第三方』。

常见的操作是,先在第三方上创建『远程 Git 文档库』,然后复制(Clone)出一个『本地 Git 文档库』

1、在托管网站上创建远程仓库

常见的代码托管仓库有:

  • 国外:github、gitlib
  • 国内:gitee、Coding

在托管网站上创建项目后,通常项目目录下是空的,可以通过以下 2 种途径初始化该项目:

创建远程仓库

在这里插入图片描述

在这里插入图片描述

远程仓库创建成功后需要配置自己生成的密钥【了解】

生成密钥
ssh-keygen -t rsa -b 4096 -C "备注"  //一路回车cat ~/.ssh/id_rsa.pub               //查看密钥然后复制到gitee上,如下

2、克隆(拉取)远程仓库至本地

git clone <远程文档库的路径> <本地文档库的文件夹名称>

更具体的的格式为:

git clone <http://Web服务器地址/远程文档库路径> <本地文档库名称>

3、推送本地仓库内容到远程仓库

  • 当我们完成对本地文档库的修改,可以将这些修改『推送』到远程 Git 仓库:

    如果是第一次推送一个工程到远程仓库需要连接远程仓库

    git remote add origin 远程仓库地址
    例如:
    git remote add orign https://gitee.com/xiaokongming/three.git
    

    然后通过 git push 命令把本地分支代码推送到远程仓库上

    git pull --rebase origin master //同步远程的数据git push origin [分支名称]
    如:
    git push origin master
    

    代码从远程同步到本地后,对文件进行修改后需要同步到远程仓库,需提交到本地仓库后,通过 git push 命令推到远程仓库

    注意:同步之前一定要git pull 保持和远程代码版本一致

    如:在本地修改一个文件,推送到远程仓库上

    git pull --rebase origin master //同步远程的数据
    git add  "add.txt"   #提交到本地暂存区
    git commit -m "注释"
    git push origin master 
    

4、添加仓库开发者

由于gitee上的仓库为私有的,只有自己才能对远程仓库进行操作,如果团队中的其他成员需要对该远程仓库进行操作,必须将团队成员的gitee帐号添加到仓库中。

配置好后团队的其他成员就可以使用到该仓库

5、推送冲突

如果远程分支并非你一个人独有,那么很有可能由于别人的提交,导致远程分支向前演进,从而导致 push 失败。此时需要『三步合并法』解决冲突问题。

  1. 从远程 Git 文档库取回当前所在分支的最新数据。
  2. 把远程 Git 文档库的分支合并到本地 Git 的分支。这一步可能会出现冲突。解决冲突,合并代码。
  3. add-commit-push 三联,提交并推送本地数据至远程 Git 文档库。

git pull 命令可以完成前两部操作。它等价于:先执行 git fetch,再执行 git rebase origin/master

6、fetch 和 pull

如果你有一个远程 Git 分支,比如在 GitHub 上的分支,当远程分支上包含当前分支没有的提交时,可以使用取回。

比如,当合并了另一个分支或你的同事推送了一个快速修复时。

​ 通过在这个远程分支上执行 git fetch ,我们就可在本地获取这些修改。这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已 。现在我们可以看到自上次推送以来的所有修改了。这些新数据也已经在本地了,我们可以决定用这些新数据做什么了。

​ 尽管 git fetch 可用于获取某个分支的远程信息,但我们也可以执行 git pullgit pull 实际上是两个命令合成了一个:git fetch + git merge 。当我们从来源拉取修改时,我们首先是像 git fetch 那样取回所有数据,然后最新的修改会自动合并到本地分支中。我们现在与远程分支完美同步了,并且也有了所有最新的修改

相关文章:

Git使用教程

Git 目标 Git简介【了解】 使用Git管理文件版本【重点】 远程仓库使用【掌握】 分支管理【重点】 远程仓库【掌握】 一、Git简介 1、版本控制系统简介 1.1、版本控制前生今世 版本控制系统Version Control Systems&#xff0c;简称 VCS是将『什么时候、谁、对什么文件…...

substrate中打印调试信息的多种方式详解

目录 1. 获取substrate-node-template代码2. 添加一个用于测试的pallet至依赖到pallets目录3. log方式来输出信息3.1 将log依赖添到cargo.toml文件3.2 log-test/src/lib.rs修改call方法 3.3 polkadot.js.调用测试函数do_something_log_test4. printable trait方式来输出信息4.1…...

Disentangled Graph Collaborative Filtering

代码地址&#xff1a;https://github.com/ xiangwang1223/disentangled_graph_collaborative_filtering Background&#xff1a; 现有模型在很大程度上以统一的方式对用户-物品关系进行建模(将模型看做黑盒&#xff0c;历史交互作为输入&#xff0c;Embedding作为输出。)&…...

Nginx快速上手

Nginx快速上手 OVERVIEW Nginx快速上手一、基本概念1.Nginx初步认识2.正向/反向代理&#xff08;1&#xff09;正向代理&#xff08;2&#xff09;反向代理 二、Nginx 安装和配置1.安装2.Nginx指令3.Nginx配置 三、Nginx的使用1.Web服务器&#xff08;1&#xff09;静态网页存储…...

【设计模式】实际场景解释策略模式与工厂模式的应用

文章目录 前言策略模式概念场景示例 工厂模式概念场景示例 策略模式与工厂模式的比较相同点不同点 总结 前言 策略模式和工厂模式是常见的设计模式&#xff0c;它们可以帮助我们更好地组织和管理代码&#xff0c;提高代码的可维护性和可扩展性。 在本篇博客中&#xff0c;我将…...

外包干了三年,算是废了...

先说一下自己的情况。大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近3年的测试&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了三年&#xff0c…...

九龙证券|光模块概念股封单资金超3亿元,传媒板块涨停潮来袭

今天A股三大股指低开低走。沪深两市收盘共37股涨停。剔除4只ST股&#xff0c;合计33股涨停。另外&#xff0c;10股封板未遂&#xff0c;整体封板率为78.72%。 涨停战场&#xff1a; 华工科技封单资金超3亿元 从收盘涨停板封单量来看&#xff0c;同方股份封单量最高&#xff0…...

[ES6] 数组

[ES6] 数组 数组的创建类数组对象可迭代对象的转换 扩展方法findfindIndexfillcopyWithinentrieskeysvaluesincludesflatflatMap 扩展运算符复制数组合并数组 数组缓冲区创建数组缓冲区视图创建 定型数组创建通过数组缓冲区生成通过构造函数 定型数组特性 拷贝浅拷贝深拷贝 数组…...

【问题描述】编写一个程序计算出球、圆柱和圆锥的表面积和体积。

【问题描述】 编写一个程序计算出球、圆柱和圆锥的表面积和体积。 要求&#xff1a; &#xff08;1&#xff09;定义一个基类&#xff0c;至少含有一个数据成员半径&#xff0c;并设为保护成员&#xff1b; &#xff08;2&#xff09;定义基类的派生类球、圆柱、圆锥&#…...

Python 人工智能:16~20

原文&#xff1a;Artificial Intelligence with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何…...

【华为OD机试真题】最优资源分配(javapython)

最优资源分配 知识点数组贪心Q时间限制:1s空间限制:32MB限定语言:不限 题目描述: 某块业务芯片最小容量单位为1.25G,总容量为M1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。 配置A:占用容量为1.251=1.25G 配置B:占用容量为1.252=2…...

git的使用——操作流程

一、什么是git git是一个开源的分布式版本控制软件&#xff0c;能够有效并高效的处理很小到非常大的项目。 二、添加SSH公钥 安装下载后&#xff0c;会发现鼠标右击&#xff0c;会出现 Git Bash Here 这个选项&#xff0c;如图所示&#xff0c;点击进入 1.打开git窗口后&…...

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…...

ClickHouse入门详解

ClickHouse基础部分详解 一、ClickHouse简介二、ClickHouse单机版安装2.1、ClickHouse安装前准备环境2.2、ClickHouse单机安装2.3、ClickHouse一些默认路径2.4、ClickHouse端口说明 三、ClickHouse数据类型四、ClickHouse的表引擎4.1 MergeTree4.1.1 partition by 分区 五、Cli…...

javaweb笔记2

JSP 1、在webapp的根目录下新建一个index.jsp文件,访问以下地址&#xff1a; http://localhost:8080/webappName/index.jsp 实际上访问这个index.jsp文件&#xff0c;底层执行的是&#xff1a;index_jsp.class这个程序。 这个index.jsp会被tomcat翻译成index_jsp.j…...

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如…...

算法训练day2:哈希表

哈希表理论基础 哈希表是根据关键码的值而直接进行访问的数据结构。 当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间&#xff0c;因为我们要使用额外的数组&#xff0c;set或者是map来存放数据&#…...

Git——利用SSH密钥本地仓库上传远程GitHub库

文章目录 1、前言2、详细步骤2.1 创建密钥2.2 进入密钥文件并复制2.3 在GitHub上添加密钥2.4 回到本地仓库文件夹&#xff0c;连接GitHub并上传 3. 结语 1、前言 现在想要从本地设备将本地仓库上传到GitHub上需要用到SSH密钥&#xff0c;接下来讲解大致的步骤&#xff0c;本文默…...

一起读源码 —— Fastjson 的核心方法及其实现原理

源码介绍 Fastjson 是阿里巴巴开源的一个 Java 工具库&#xff0c;它常常被用来完成 Java 的对象与 JSON 格式的字符串的相互转化。 此文读的源码是撰写此文时 Fastjson 的最新的发布版本&#xff0c;即 1.2.83 下载源码 请前去 github 找到 release 最新版下载后解压&…...

Python实现批量图片下载及去重处理

背景 在爬虫应用开发中&#xff0c;常常需要批量下载图片&#xff0c;并对图片进行去重处理。Python 是一种非常流行的编程语言&#xff0c;也是开发爬虫应用的首选&#xff0c;本文将介绍如何使用 Python 下载图片&#xff0c;并对下载的图片进行去重处理。 内容 首先&…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...