Git仓库简介

1、工作区、暂存区、仓库

在这里插入图片描述

工作区:电脑里能看到的目录。

暂存区:工作区有一个隐藏目录.git,是Git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

仓库:远程服务器中的项目。

2、git版本控制

git版本控制一般有两个命令 reset 和 revert。reset 代表将当前节点“销毁”(回退,节点还存在),就像不存在一样;revert 代表创建一个新的节点,其中记录我要删除当前节点。其中reset 中有 三个参数需要注意:

--mixed 默认参数,重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。--soft 回退到某个版本。--hard 撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。

执行 git reset HEAD
在这里插入图片描述

执行 git revert HEAD
在这里插入图片描述

撤销修改:

对文件做了修改,现在需要撤销修改:

git restore <文件名>或者git checkout -- 文件名

如果文件已经add,但还没commit,可以使用以下命令,撤销add,恢复到上一步状态:

"git restore --staged <file>或者git reset HEAD 文件名

如果已经commit,需要删除文件,

1、被提交到仓库的某个文件需要删除,可以使用 git rm 命令:
git rm <file>
git commit -m ""2、如果只想从暂存区删除文件,本地工作区不做出改变,可以:
git rm --cached <file>

3、分支管理

3.1 创建/删除分支

一般 master 分支用于发布版本,开发都是其他他分支上进行,也会存在一些 bugFix 分支,feature 分支用于开发未来的功能。创建分支有以下三种命令:

git branch 分支名git checkout -b 分支名git switch -c 分支名

删除分支

git branch -d 分支名

3.2 分支管理策略

分支管理一般基于三个命令进行,分别未 merge、rebase、cherry-pick

3.2.1 merge

merge的合并方式默认是 fast-forward,即将master 指针直接指向当前节点。例如我们创建 readme.txt 文件,并且add 和 commit,此时创建分支 dev , 此时git 的 graph 如下;

git switch -c dev

在这里插入图片描述
我们对readme.txt 文件做修改,并切换到 master 分支,使用 git merge dev 命令,git 的graph 如下:
在这里插入图片描述

可以看到 git 并没有创建新的节点,而是将 master 指针快速移动到了dev分支,如果要保存开发记录,我们可以显示禁用掉 fas-forward 模式 ,即在merge 后加上参数 --no-ff

git merge --no-ff -m "说明文字" 分支名

此时,git的graph如下,可以看到,git创建了一个新的节点,继承了dev分支。
在这里插入图片描述

3.2.2 rebase

rebase比较有意思,翻译成中文名叫”变基“,我个人把他理解成剪切,就像 ctrl + x 一样,将当前分支黏贴到目标分支。这是原始的 graph。
在这里插入图片描述

我们使用以下命令:

git switch Featuregit rebase master

此时,git 的 graph 变为下面模样
在这里插入图片描述

可以,看到feature分支接到了master后面。需要注意的是,rebase 提供了 -i 参数,是”剪切”变得更加灵活,可以自己尝试一下。那么 rebase 和 merge 的区别在哪里?

假如master和feature开发了不同的功能,即两个分支没有文件冲突,和3.2.1的情况不一样(dev分支继承在master分支),此时我们执行命令:

git switch mastergit merge feature

此时,git的 graph 如下所示:
在这里插入图片描述

3.2.3 cherry-pick

这个命令就比较简单了,他就相当于复制节点到当前分支。

需要注意的是我们在合并前都需要git commit 将暂存区的内容提交到分支中。

4、标签

分支可以移动,当一个节点打上标签后这个标签就在这个节点上,不会移动。那么我们只需要记住一些命令就好了:

#创建标签
git tag 标签名 commit_id#指定标签信息
git tag -a <tagname> -m "blablabla..."#删除标签
git tag -d 标签名#推送某个标签到远程
git push origin xxxx#删除远程标签,需要首先删除本地标签
git tag -d 标签名
git push origin :refs/tags/标签名

5、push、pull、fetch

如果要与远程仓库交互,就需要用到这三个命令,其中 pull 是 fetch 和 merge 的结合。

5.1 fetch

fetch 是从远程仓库抓取 origin/master 节点,

git fetch origin/[branch]

5.2 pull

git pull <远程主机名> <远程分支名>:<本地分支名>

5.3 push

将本地仓库推送到远程仓库,

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

删除远程仓库分支

git push origin --delete mastergit push origin :分支名

6、其他命令

  • git status 查看状态
  • git diff 查看文件改动
  • git log
  • git stash(暂存当前工作区)
  • 相对引用,git checkout master^2(切换父节点)

追踪远程分支:

git checkout -b 本地分支 远程分支git branch -u 远程分支  本地分支

7、git log

显示分支图

git log --graph --pretty=oneline --abbrev-commit

8、关闭远程链接

git remote remove origin

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 42. 接雨水

2023.8.29 本题可以用双指针做&#xff0c;求出每一列能盛的雨水&#xff0c;再相加即可。不过暴力法会超时&#xff0c;需要优化。 双指针&#xff08;暴力&#xff09;&#xff1a; class Solution { public:int trap(vector<int>& height) {int ans 0;for(int …

C++自创题目——第一期

一、题目描述&#xff1a; 在一段时间内&#xff0c;到达港口的船有n艘&#xff0c;其中每艘船的信息包括:到达时间t(表示第t秒)&#xff0c;船上乘客数k&#xff0c;以及k名乘客的国籍。输出前3600s内每艘船上国籍种数&#xff0c;并输出国籍种数最少的船只的到达时间。 二、…

ELK日志收集系统

一&#xff0c;概述 ELK由三个组件构成 作用&#xff1a;日志收集 日志分析 日志可视化 二&#xff0c;组件 1&#xff0c;elasticsearch 日志分析 开源的日志收集、分析、存储程序 特点 分布式 零配置 自动发现 索引自动分片 …

QML Book 学习基础3(动画)

目录 主要动画元素 例子&#xff1a; 非线性动画 分组动画 Qt 动画是一种在 Qt 框架下创建交互式和引人入胜的图形用户界面的方法&#xff0c;我们可以认为是对某个基础元素的多个设置 主要动画元素 PropertyAnimation-属性值变化时的动画 NumberA…

JavaSE 集合框架及背后的数据结构

目录 1 介绍2 学习的意义2.1 Java 集合框架的优点及作用2.2 笔试及面试题 3 接口 interfaces3.1 基本关系说明3.2 Collection 常用方法说明3.3 Collection 示例3.4 Map 常用方法说明3.5 Map 示例 4 实现 classes5 Java数据结构知识体系5.1 目标5.2 知识点 1 介绍 集合&#xf…

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立&#xff0c;于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢&#xff1f; 服务端给客户端发消息了&#xff1a;客户端连接已被关闭&#xff…

Kubernetes入门 十二、网络之Ingress

目录 概述安装 Ingress使用 Ingress准备工作部署Ingress设置默认后端Ingress 中的 nginx 的全局配置限流路径重写基于 Cookie 的会话保持技术配置 SSL 概述 通常情况下&#xff0c;service 和 pod 的 IP 仅可在集群内部访问。 Service 可以也使用 NodePort 暴露集群外访问端口…

LeetCode-160. 相交链表

这是一道真的非常巧妙的题&#xff0c;题解思路如下&#xff1a; 如果让他们尾端队齐&#xff0c;那么从后面遍历就会很快找到第一个相交的点。但是逆序很麻烦。 于是有一个巧妙的思路诞生了&#xff0c;如果让短的先走完自己的再走长的&#xff0c;长的走完走短的&#xff0c;…

java八股文面试[多线程]——有几种创建线程的方式

this逃逸问题&#xff1a;构造器中启动线程。 面试题&#xff1a; 用Thread和Runable创建线程的差别 一、Runnable和Thread的区别 继承性&#xff1a;Thread是一个类&#xff0c;因此如果继承Thread类&#xff0c;子类就不能再继承其他的类了&#xff0c;而实现Runnable接口…

林业气象站——林业种植气象观测

林业气象站是一种用于观测林区气象环境的仪器&#xff0c;能够观测林区天气、土壤等自然环境参数&#xff08;温度、湿度、风速、风向、降雨量、气压、放射线、土壤湿度等&#xff09;&#xff0c;为开展环境观测、天气预报、灾害预警、林区虫害防治起到综合指导作用。 林业气…

Kubernetes(七)修改 pod 网络(flannel 插件)

一、 提示 需要重启服务器 操作之前备份 k8s 中所有资源的 yaml 文件 如下是备份脚本&#xff0c;仅供参考 # 创建备份目录 test -d $3 || mkdir $3 # $1 命名空间 # $2 资源名称&#xff1a; sts deploy configMap svc 等 # $3 资源备份存放的目录名称for app in kubec…

JVM 是怎么设计来保证new对象的线程安全

1、采用 CAS 分配重试的方式来保证更新操作的原子性 2、每个线程在 Java 堆中预先分配一小块内存&#xff0c;也就是本地线程分配缓冲&#xff08;Thread Local AllocationBuffer&#xff0c;TLAB&#xff09;&#xff0c;要分配内存的线程&#xff0c;先在本地缓冲区中分配&a…