Git的操作和使用

news2025/1/15 0:31:44

一、基本操作

1、创建git本地仓库

(1)创建目录:mkdir gitcode

(2)进入目录:cd gitcode/

(3)查询目录内容:ls

(4)在当前目录下创建git本地仓库:git init

(5)显示树状结构:tree  .git/

2、创建好仓库记得配置name和email

(1)配置name:git config user.name  "root"这里是我定义的name你们可以换成自己的

(2)配置email:git config user.email "自己的地址"

(3)列出本地仓库所有配置项:git config -l

(4)删除配置的name:git config --unset user.name

(5)删除配置的email:git config --unset user.email

(6)因为一台服务器可以有多个本地仓库,配置当前服务器所有本地仓库的name和email:

git config --global user.name ""                 git config --global user.email ""

(7)删除全局配置的name和email:git config --global --unset user.name     git config --global --unset user.email

3、流程图

(1)objects(对象库):修改的工作区的内容会写入对象库的一个新的git对象中(进行版本的管理),暂存区和master分支存的不是对象,是一个个对象的索引,HEAD是个指针,我们如果能拿到HEAD我们就能拿到master这个树就能知道具体修改的内容,我们就可以对暂存区和master区进行版本的管理,commit之后我们才真正的写入了版本库

(2)暂存区在树形图中实际是存放在index索引中的

4、

(1)创建文件:touch 文件名创建文件

(2)编写文件:vim 文件名

(3)退出文件:esc : wq 

(4)获取文件内容:cat 文件名

5、添加到暂存区

(1)git add . (将所有文件添加到暂存区)

(2)git add 文件名(将指定文件添加到暂存区)

(3)git add 文件名1 文件名2:可以同时添加多个文件

6、上传到master中

(1)git commit -m ""  (引号内是我们添加的细节自定义就可以)

7、查看提交记录:git log

8、打印一行提交记录:git log  --pretty=oneline

9、查看HEAD指针:cat .git/HEAD

10、

(1)打印master:cat .git/refs/heads/master (前两位是文件名的名称)

(2)查看我们打印出来的内容:git cat-file -p 查找的文件内容(举例: 3e17c5d16b7cc6fa93a46ad218fb3af95660cd7d)

11、commit只能将add之后的内容提交到master中不能将工作区的提交进来

12、看我们的改动细节:git diff 文件名

13、查看当前仓库状态:git status

14、版本回退(回退只是改变我们的master的指真指向,所以回退速度快):

(1)固定格式:git reset [--soft | --mixed | --hard] [HEAD]

(2)git reset --hard 查找的文件内容(举例: 3e17c5d16b7cc6fa93a46ad218fb3af95660cd7d)

这个命令会将3e...这个文件后的操作全部回退,回到刚编写完3e...这个状态(谨慎使用)

(3)并没有将他的id清除掉时候可用:还可以进行版本回退,我们上面打印了信息id,我们可以用 git reset --hard 999...这个id然后就可以回到999...这个信息的状态

(4)如果我们不小心清屏了(3)的方法没法用了,我们可以用 git reflog来查找我们以前提交过的id信息操作(3)进行版本回退

15、撤销修改(都可以应用 --hard这个指令)(前提条件,commit之后没进行push操作)

(1)工作区回退:git checkout -- ReadMe (也可以手动修改)

(2)暂存区的回退(此方法只回退暂存区,不能将工作区一起回退):git reset --mixed(可以不写--mixed因为他是默认的) HEAD^^  文件名    (不加^是回退到当前版本加一个就是回到上一个版本加两个就是回到上上一个版本)

(3)版本库回退:get reset命令

(4)撤销的目的就是不影响远程仓库的代码

16、我们上传到版本库还不是最终的地方我们还需要上传到远程仓库,用push命令

17、删除文件

(1)删除工作区的文件:rm 文件名

(2)将删除命令传至暂存区:git add 文件名(在暂存区删除)

(3)将暂存区删除命令传至版本库:git commit -m "自定义细节"

18、删除文件对(17)的优化:git rm 文件名 (这个操作直接就将我们的17的括号一括号二都包括了,直接将我们的工作区和暂存区都删除了,我们然后在直接进行括号三的操作就可以了)

19、清屏操作:clear

二、理解分支

1、master就是我们的主分支,指向我们最新的一次提交

2、合并分支我们可以自己创一个合并分支,最后和我们的master分支进行合并操作

3、查看我们现在本地有哪些分支:git branch 自定义分支名称

4、HEAD:

(1)不一定指向master分支可以指向任意分支

(2)HEAD指向那个分支,哪个就是当前正在工作的分支

(3)切换HEAD指向的分支:git checkout dev

5、我们创建了dev之后我们是站在当前版本下创建的所以我们刚才创建的dev和master指向的是一样的都是最新一次的提交

6、当我们在新建的分支dev上提交之后我们在切换回master分支之后,master的文件并没有我们在dev分支上的修改结果

7、我们要想我们在dev上的修改能合并到我们的master分支上:

(1)首先我们要先切换到我们的master分支上

(2)然后操作:git merge dev(最好使用13讲到的式子)

8、当我们的分支合并后我们的分支意义就不大了:删除分支:git branch -d dev(我们不能在dev分支上删除dev分支)

9、合并分支会产生合并冲突问题:当我们的分支也对该内容修改,我们的master分支也对该内容修改我们合并时候就会出现冲突的现象(会报错)(例如dev分支修改的是bbb我们master修改的是aaa),出现这个问题我们可以查看我们的文件内容,想保留哪部分就保留哪部分将剩下的部分删掉就可以,我们更改完可以发现我们修改后的文件在工作区中。可以进行再次的文件提交,修改完后我们的master指向的是最新一次的id提交,我们的dev分支保存的是冲突修改bbb时的id

10、切换分支如果分支不存在我们可以用一行命令完成创建分支并且切换分支:git checkout -b 分支名字

11、显示我们提交的图示:git log --graph --abbrev-commit

12、我们在进行合并的时候会有两种模式一个是Fast forward(ff)模式一个是非Fast forward(no-ff)模式,我们可以自己设定模式,一般都用no-ff的,因为Fast forward是区分不出是dev分支还是master分支合并进来的,no-ff的可以区分

13、合并时候使用no-ff模式:git merge --no-ff -m ”提交信息“分支名字(merge之后进行一次提交,是我们的master只想最新的id)

三、多人协作开发

1、修改bug,我们新建个分支不要再更新任务的分支上和master上操作

2、不想对dev对工作区的修改影响到master分支上的状态,我们可以在dev上进行工作区的保存:git stash(如果我们的文件是新建的没有进行过add commit操作是没法被我们的stash管理的)

3、新建并切换分支:git checkout -b 分支名

4、修复bug

(1)新建分支: git checkout -b  fixbug(分支名)

(2)修改内容:vim ReadMe(文件名)

(3)add commit:提交

(4)合并:git commit -m “fix bug:f”  fixbug

5、查看我们在stash工作区保存的内容:git stash list

6、将在stash工作区保存的内容放出来:git stash pop

7、我们在修复bug之后(此时我们有3个分支 dev修改 fixbug修复 master主)

(1)我们的修改分支首先合并master

(2)master合并我们修改的分支

四、删除操作:我们必须切换到master分支删除,不能在当前分支删除

1、当我们还没进行合并操作时候是没法用 git branch -d 删除分支的

2、我们有个强制删除:git branch -D 分支名

五、远程操作,前面都是本地操作

1、码云新建仓库

2、提问题、建议

3、合并申请单(管理员同意才能将我们的代码进行merge操作)

4、克隆文件到我们本地仓库

(1)复制后打开linux不要再本地gitcode上操作

(2)git clone 复制的链接

(3)查看我们复制过去的文件 cd remote-gitcode/

(4)仓库结构

5、查看远程仓库:git remote  查看更详细些 git remote -v

6、SSH的使用

(1)在用户主目录下看看有没有.ssh目录,如果有再看看这个目录下有没有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件如果已经有可可以进行下一步,如果没有需要创建

(2)如果没创建过我们输入:ssh -keygen -t rsa -C "邮箱" 然后一路回车就行

(3)查看我们的公钥

(4)把我们的公钥放在码云上

(5)配置完之后就可以复制SSH的地址进行克隆操作了

(5.1)退回主界面  git clone  复制的SSH的地址

7、流程图

8、查看配置项:在我们remote-gitcode(文件名里用) git  config -l  当时我们配置的全局变量所以我们的配置里有我们配置的name和emil

9、提交至远程仓库:git push origin master:master (第一个master是本地分支,冒号后面是远程分支,如果我们的本地分支和远程分支一样可以舍去) 变成 git push origin master

10、我们在克隆的时候,我们的本地master分支会和远程仓库分支自动建立联系

11、从远程仓库拿数据到本地仓库(拉取加合并):git pull origin master:master(第一个是远程分支,第二个是本地分支)如果相同也是可以省略的,变成 git pull origin master

12、有一些文件内容我们不想对外展示

(1)首先在远程仓库下创建一个(里面写我们不想追踪文件的文件名):vim .gitignore

 此时我们创建的a.so文件就不会被我们进行add以及以后的操作

(2)如果我们还是想把我们上面忽略的文件进行提交:

(2.1)git add -f a.so(不推荐)

(2.2)

  单独不排除a.so

(3)查看我们文件被忽略的原因:git check-ignore -v d.so

13、起别名:git config --global alias.st status(给status起的别名就是st)

14、标签(我们上面讲的是用版本id来回退太麻烦)用于版本回退(v后面加几我们自己定):

(1)给我们最新提交打标签为v1.0:git tag v1.0

(2)查看我们有几个标签:git tag

(3)针对前面的提交进行打标签

(3.1)查看提交的id:git log --pretty=oneline --abbrev-commit

(3.2)git tag v0.9 提交的id   

(4)对标签进行描述:git tag -a v0.8 -m "描述内容" 提交的id

(5)看我们标签的信息:git show v0.8

(6)将标签推至远程仓库:git push origin v1.0

(7)删除标签:

(7.1)本地删除:git tag -d v1.0

(7.2)删除远程仓库的:

(7.2.1)在本地删除远程:git push origin :v1.0

(7.2.2)直接在码云上点击标签的删除删除远程

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

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

相关文章

react引入iconfont的svg图标

react引入iconfont的svg图标 本文目录 react引入iconfont的svg图标普通图标通过link引入css组件内引入css使用 svg图标通过script引入js组件内引入js使用 通过封装组件自定义封装组件中调用 通过antd封装使用 普通图标 通过link引入css <link rel"stylesheet" h…

机器学习进行情感分析(上)

目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和特征提取 三、 数据划分 一、 绪论 近年来&#xff0c;随着互联网和社交媒体的快速发展&#xff0c;人们…

python自动化登录(测试篇)

起初是想抓取下请求看能不能做模拟登录。无奈发现&#xff0c;目标网站的请求数据是加密过的&#xff0c;而且网站代码也是编译后的代码。要从编译后的代码中提取加密算法。我的第一想法是明知不可为而不为。但是转念一想&#xff0c;何不试试python大法。 1.前期准备 python我…

Android图片压缩、Drawable和Bitmap转换、bitmap和base64转换

1. Android图片压缩、Drawable和Bitmap转换、bitmap和base64转换 1.1. Drawable和Bitmap之间的转化 1.1.1. bitmap和Drawable间的区别 Bitmap - 称作位图&#xff0c;一般位图的文件格式后缀为bmp&#xff0c;当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执…

【c++】深入剖析与动手实践:C++中Stack与Queue的艺术

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们来到STL新的内容&#xff0c;stack和queue 目录 1. stack的介绍与使用函数介绍例题一&#xff1a;最小栈例题二&#xff1a;栈的压入、弹出队列栈的模…

架构师系列- 消息中间件(15)-kafka业务实战

7.1 顺序性场景 7.1.1 场景概述 假设我们要传输一批订单到另一个系统&#xff0c;那么订单对应状态的演变是有顺序性要求的。 已下单 → 已支付 → 已确认 不允许错乱&#xff01; 7.1.2 顺序级别 1&#xff09;全局有序&#xff1a; 串行化。每条经过kafka的消息必须严格…

系统设计 --- E2E Test System

系统设计 --- E2E Test System 什么是E2EE2E Architecture Example 什么是E2E E2E&#xff08;端到端&#xff09;测试是一种软件测试方法&#xff0c;旨在模拟真实的用户场景&#xff0c;测试整个应用程序或系统的端到端功能和交互流程。E2E 测试涵盖了从用户界面到后端系统的…

uniapp获取当前位置及检测授权状态

uniapp获取当前位置及检测授权定位权限 文章目录 uniapp获取当前位置及检测授权定位权限效果图创建js文件permission.jslocation.js 使用 效果图 Android设备 点击 “设置”&#xff0c;跳转应用信息&#xff0c;打开“权限即可”&#xff1b; 创建js文件 permission.js 新建…

视频怎么批量压缩?5个好用的电脑软件和在线网站

视频怎么批量压缩&#xff1f;有时候我们需要批量压缩视频来节省存储空间&#xff0c;便于管理文件和空间&#xff0c;快速的传输发送给他人。有些快捷的视频压缩工具却只支持单个视频导入&#xff0c;非常影响压缩效率&#xff0c;那么今天就向大家从软件和在线网站2个角度介绍…

ProcessOn已凉,绘图就用谷歌云盘+draw.io达到了巅峰

神器draw.io 首先&#xff1a;对不起ProcessOn&#xff0c;无意冒犯&#xff0c;ProcessOn并没有凉&#xff0c;而且还一直在用。谁让你们火呢&#xff0c;借词一用&#xff0c;哈哈哈哈。 4年前我用谷歌云盘时就无意间发现了draw.io这个绘图工具。 先说下如何发现的&#x…

NumPy 1.26 中文官方指南(一)

NumPy 用户指南 原文&#xff1a;numpy.org/doc/1.26/user/index.html 本指南是一个概述&#xff0c;解释了重要特性&#xff1b;细节请参阅 NumPy 参考文档。 入门指南 什么是 NumPy? 安装 NumPy 快速入门 NumPy&#xff1a;初学者的绝对基础 基础知识和用法 NumPy 基础…

java数据结构泛型

泛型 一.了解包装类二.基本数据类型对应的包装类三.装箱与拆箱四.什么是泛型&#xff1f;五.语法六.泛型类使用七.泛型的上界八.泛型方法 在学习泛型之前,我们需要先了解一下包装类。 一.了解包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代…

爬虫的实战应用之短信炸弹playwright现代网页测试工具

不讲废话&#xff0c;先上原理&#xff1a; 短信炸弹&#xff0c;也就是说持续对一个手机进行发送短信&#xff0c;实现的方式就是&#xff0c;利用某些网站的登录 &#xff0c;注册的时候&#xff0c;发送短信验证码来实现。 如下图&#xff0c;其中有一个id为phone的输入框&a…

golang beego结合wire依赖注入及自动路由

1 安装wire 1.1 通过命令直接安装 go install github.com/google/wire/cmd/wirelatest 1.2 通过go get方式安装 go get github.com/google/wire/cmd/wire进入目录编译 cd C:\Users\leell\go\pkg\mod\github.com\google\wirev0.6.0\cmd\wire go build 然后将wire.exe移动到…

代码随想录:二叉树22-24

目录 700.二叉搜索树的搜索 题目 代码&#xff08;二叉搜索树迭代&#xff09; 代码&#xff08;二叉搜索树递归&#xff09; 代码&#xff08;普通二叉树递归&#xff09; 代码&#xff08;普通二叉树迭代&#xff09; 98.验证二叉搜索树 题目 代码&#xff08;中序递…

嵌入式全栈开发学习笔记---Linux基本命令2

目录 cp 源路径 目的路径 cp -r 源路径 目的路径 mv 源路径 目的路径 mv oldname newname 接下来我们继续介绍两个常用的命令 一个是拷贝文件&#xff0c;一个是剪切文件 &#xff0c;或者也可以用来改名字。 cp 源路径 目的路径 “cp”用来拷贝文件或者目录&#xff0c;…

Swagger3.0(Springdoc)日常使用记录

文章目录 前言一、默认地址二、注解OperationTag 三、SpringBoot基础配置四、Swagger导入apifox五、Swagger其他配置六 knife4j 参考文章 前言 本文并不是Swagger的使用教程&#xff0c;只是记录一下本人的操作&#xff0c;感兴趣的可以看下 一、默认地址 http://localhost:…

38-数组 _ 一维数组

38-1 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n是一个常量表达式&#xff0c;用来指定数组的大小 举例&#xff1a; int arr[10]; char ch[5]; double data[20]; 问&…

Vue基础:为什么要学Vue3,Vue3相较于Vue2有那些优势?

为什么要学Vue3&#xff1f; 1.框架层面 1.响应式底层API的变化 Proxy 数组下标的修改 对象动态添加属性 解释说明&#xff1a;1.vue2采用的是Object.definePrototype&#xff0c;它每次只能对单个对象中的单个数据进行劫持&#xff0c;所以在Vue2中data()中的数据一多就要进行…

香港BTC、ETH现货ETF同时通过,对行业意义几何?

香港比美国更快一步通过以太坊现货 ETF。 2024 年 4 月 15 日&#xff0c;香港嘉实国际资产管理有限公司&#xff08;Harvest Global Investments&#xff09;今天宣布&#xff0c;得到香港证监会的原则上批准&#xff0c;将推出两大数字资产&#xff08;比特币及以太坊&#…