git 学习(基于Ubuntu和gitee)

news/2025/2/24 23:41:12

Git Learning

(Ubuntu 环境下)

1. 在进行工作区修改文件撤回时:

会出现3种情况

工作区暂存区版本库解决方式
有需要修改的代码1.手动撤销–不推荐
2.使用git checkout – 文件名
有需要修改的代码有需要修改的代码git reset HEAD 文件名
有需要修改的代码有需要修改的代码有需要修改的代码 前提条件: commit 后面没有push
git reset

注意:撤销的目的是为了防止不好的代码被push到远程仓库中。

2. 如何删除工作区的文件

方法一:直接在文件工作区删除文件

  1. 现在文件工作区删除文件
  2. git add 提交变化到暂存区
  3. git commit -m “删除文件” 提交到版本库

方法二:使用git rm命令

  1. git rm 文件名(在工作区和暂存区都将文件删除)
  2. git commit -m “删除文件” 提交到版本库

git__28">3. git 分支管理

  • 举个例子:🌈🌈🌈
    😄

在一个玄幻的武侠世界中,一个名门望族之女,即将出嫁,为了选取夫婿,举行了一场比武大会。 此时,你和你的对手都跃跃欲试。

50% 50% 武侠世界比武大会 你的水平 你的对手

😄 在刚开始的时候你和你的对手旗鼓相当,不出所料的选择了同一个计划,但是你用之前的影分身多学了一套剑法


你的实际准备

分身
合体
降龙十八掌
参加比武大会
辟邪剑法

你的对手的实际准备

你的对手
降龙十八掌
参加比武大会
  • 这就是一个简单的分支

git__64">3.1 git 的分支管理的内容

提交时间主线
主分支
1
2
3
4
5
最新一次的提交id
HEAD
master
  • 通过master指针找到最新的提交
  • 再通过parent指针找到以往的提交

  • 同时我们还可以在主分支中创建分支
提交时间主线
分支
合并
主分支
1
2
3
4
5
最新一次的提交id
分支1

3.2 创建分支

  • head 不只可以指向master(主分支),还可以指向其他分支
  • 被指向的分支就是工作区的分支

git branch 分支名

😄 如:git branch dev🌈🌈🌈
现在我们就创建了一个dev分支

因为这个分支是在我们最新的版本情况下创建的,所以他也指向我们最新的提交

提交时间主线
新建分支
主分支
1
2
最新一次的提交id
dev

  • 现在我们想要切换分支
    git checkout 分支名

在切换前,我们的分支指向主分支:

切换后:
image-2

  • 现在我们再次更改 readme.txt文件
image-4
  • 提交后,我们再次切换回主分支
  • 这时我们会惊奇的发现redme.txt文件的修改都不见了!!
  • 在切换回来之后又会发现,内容又回来了。

通过证明,我们得到结论:

  • 在dev 上创建commit,并切换回主分支,不会影响到主分支的commit。
提交时间主线
新建分支
主分支
1
2
最新一次的提交id
dev
dev commit

此时的两个分支就是互不影响的,接下来我们可以对他们进行合并操作。

3.3 合并分支

现在我们想要将dev分支上的操作合并到master分支上, 首先就要切换到master上

  • 合并分支的命令是 git merge 分支名

现在我们将dev分支合并到master分支上:

git checkout master
git merge dev

在进行合并操作时,我们可以看到fast-foreward的标识, 现在说明我们的master分快速地指向了dev commit

3.4 删除分支

上面我们进行合并操作之后,dev分支的用处就不大了,为了节省资源, 现在删除dev分支

  • 删除分支的命令是 git branch -d 分支名

  • 进行分支删除时,必须切换为主分支,否则会报错。

  • 在实际的工程中我们鼓励使用分支,因为这样的操作使得我们的代码更加安全,也更加方便管理

3.5 分支合并冲突

  • 分支出现的情况

    在创建的分支dev和master分支都对readme.txt文件进行操作,在合并时,会出现合并冲突。

修改readme.txt
修改readme.txt
HEAD
master
最新一次的提交id
master commit
dev
dev commit
合并冲突
  • 现在我们来模拟这个过程并解决这个问题:

创建一个分支 & 切换到这个分支上

git checkout -b dev

完成下面的步骤 🌈🌈🌈

  • 现在我们再readme.txt文件中添加一行内容:
  • 我们再次提交到dev1分支上
  • 切换到master分支上,也添加上一行内容
  • 再次提交到master分支上

现在直接使用git merge dev1命令进行合并,会出现合并冲突

现在readme.txt文件内容如下:
image

  • 现在的冲突就需要们认为解决,我们可以选择保留其中一个分支的修改,或者是手动合并。

    拓展: 其实log命令也可以进行可视化的展示

    git log --graph --oneline --all
    git log --graph --abbrev-commit
    
    image-2

3.6 分支管理-合并模式

  • Fast-forward模式
    快速地合并,提交,但在可视化中无法分辨出是哪个分支的提交
image-3
  • –no-ff
    为了解决这个问题,我们可以使用--no-ff参数,这样就会创建一个新的提交,并将两个分支的提交都指向这个新的提交。
git merge --no-ff -m "合并分支" dev1
  • -m的出现是为了是master分支指向新的提交。
image-3

4. 分支策略

4.1 master 分支具有稳定性

✈️✈️✈️🌈🌈🌈
在日常的开发中,开发人员提交的代码,还没有进过测试(不稳定存在bug), 所以 master 分支是最稳定的分支。

张三基于2开发
合并
李四基于3开发
合并
1
2
3
4
f1
f2
5

4.2 bug 分支

当开发人员发现了一个 bug 时,他们会创建一个 bug 分支,然后修复这个 bug。

  • 假设我们现在遇到了这样的情况
测试出现Bug
1
2
Bug
head
dev2

此时我们在dev2进行开发时,突然发现了一个主分支上的Bug,现在我们怎么办?

在遇到这样的情时,我们一般会在创建一个分支来修复,主分支上的bug.

测试出现Bug
正在进行功能开发
修复Bug
合并
1
2
Bug
head
dev2
fixBug
3

现在主分支上的问题就解决了,但是,在进行dev2开发时,master分支上已经有BUG了
如果此时我们直接将新开的功能直接合并到master分支就会出现新的问题。

所以此时我们就可以将master分支上的内容合并到dev2分支上,
将所有的问题解决了,然后再将dev2分支合并到master分支上

测试出现Bug
工作区内容指向
正在进行功能开发
修复Bug
合并
合并
修复问题
合并到master
1
2
Bug
head
dev2
fixBug
3
f2
4

4.3 强制删除分支

zenuml
    title Conversation One
    @Actor manager
    @Actor me
    manager->me: Hi zdl.
    me->manager: How are you, is there any problem?
    manager->me: There we got a new request from boss to develop a new function .
    me->manager: Ok, I will create a new branch for this function.
zenuml
    title Conversation Two
    @Actor manager
    @Actor me
    manager->me: Hi zdl.
    me->manager: Hi, I'm still working on the new function, please wait for a second.
    manager->me: Ok, but I've got a breaking news to tell you 
    manager->me:that the boss has changed his mind to cancel the new function.
    me->manager: Ok..., wait, what!!

。。。开发了这么久的项目说不要就不要么!?
没得办法,现在就只能将自己的心血删除掉了。

dev
1
2
new f

现在你的分支上已经有很多东西了,一般的方式无法将其直接删除,这时我们就需要用到新的命令:

git branch -D 分支名

5.远程操作

仓库的建立、克隆、推送、拉取、删除等操作都需要远程操作,下面介绍一下远程操作的命令。

  mindmap
  root(远程操作)
      ((拉取))
      ((克隆))

😄 除此之外我们需要再gitee云平台上创建自己的仓库,搭建自己的码云。

5.1 创建自己的仓库

由于github在国内的访问受限,我们就更倾向于使用国内的云平台来托管我们的代码,因此,gitee就成为了我们得首要选择。
首先我们来到gitee平台:

如果还没有注册,就需要注册一个账号。

进入之后,现阶段就只需要填写这些信息,后面如果有需要,再反过来填写相应的信息。

在个人的主页下就可以查看自己创建的仓库了。

5.2 克隆远程仓库(clone)

创建完远程仓库后,我们就需要在文件目录下克隆我们创建的仓库,这样我们才能够将该文件路径下的文件推送到这个仓库之中

在这里我就只讲最简单的这种方式(HTTPS方式),如果有需要就可以参考一下其他的文章。

这个操作十分的简单,我们首先需要拿到我们需要的网址:
首先进入我们得gitee码云平台:

拿到网址后,我们就只需要在命令行窗口输入这一行命令就可以了:

git clone `你的网址`

之后这个文件路径下就会出现一个和你的仓库同名的仓库。


接下来我们在这个文件夹中的文件内容修改操作,都可以通过命令推送到仓库。

好了,我们今天的gitee学习就到这里,我们下期再见,拜!!
🌈🌈😄


http://www.niftyadmin.cn/n/5858361.html

相关文章

蓝桥杯单片机基础部分——单片机介绍部分

前言 这个部分是额外的,我看我有的学弟学妹基础比较差,对板子上面的模块不太熟悉,这里简单的介绍一下 蓝桥杯单片机 这个就是蓝桥杯单片机的板子,它的主控芯片是(IAP15F2K61S2),这里就对他常用…

第150场双周赛:好数字之和、分割正方形 Ⅰ、分割正方形 Ⅱ、最短匹配字符串

Q1、好数字之和 1、题目描述 给定一个整数数组 nums 和一个整数 k,如果元素 nums[i] 严格 大于下标 i - k 和 i k 处的元素(如果这些元素存在),则该元素 nums[i] 被认为是 好 的。如果这两个下标都不存在,那么 nums…

IO、NIO解读和不同点,以及常用的文件流操作方法

java高级——IO、NIO解读和不同点,以及常用的文件流操作方法 前情提要文章介绍1. 什么是IO1.1 节点的分类1.2 传输方式 2. 七大传输方式解读2.1 File类解读2.1.1 创建文件的三种方式2.2.2 File的常用方法2.2.3 如何正确认识FileUtils 2.2 字节流(核心&am…

前端【技术方案】重构项目

1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码,找出代码中的问题,如代码冗余、耦合…

太空飞船任务,生成一个地球发射、火星着陆以及下一次发射窗口返回地球的动画3D代码

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from mpl_toolkits.mplot3d import Axes3D# 天体参数设置(简化模型) AU 1.5e8 # 天文单位(公里) earth_orbital_radius …

图解JVM-1. JVM与Java体系结构

一、前言 在 Java 开发的广袤天地里,不少开发者都遭遇过令人头疼的状况。线上系统毫无征兆地卡死,陷入无法访问的僵局,甚至直接触发 OOM(OutOfMemoryError,内存溢出错误);面对 JVM 的 GC&#…

C进阶 数据的存储

目录 前言 一,VS的知识储备 二,有趣的scanf()读取 三,数据的存储 引言 四,整数存储 五,小数存储 总结 前言 这里将深入计算机,看计算机是如何进行数据的存储的,怎么在计算机里面筑巢 为…

es-head 正则查询和标准正则查询的差异

在es-head里面查询,需要查询字符串是一个json串,因此就要符合json串的格式,在es-head里面可以通过regexp做正则查询,而这里的正则表达式其实是写成字符串的形式的,因此就要面对字符串转义的问题,比如你想匹…