git的学习笔记

一,git的安装

mac电脑的安装

xcode-select --install

windows安装,用指令麻烦一些

随便找个视频观看看教程,去官网下载就可以了。 

centos安装

sudo yum install git -y

ubuntu安装

sudo apt-get install git -y

查看git安装的版本

git --version

二,git的基本概念

工作区:是在电脑上你要写代码或⽂件的⽬录

暂存区(stage  /   index):add之后的代码会放在这里

版本库(repository):存放已经commit的过的代码,然后形成一个版本

HEAD:指向分支,分支就是当前在工作的分支

远程主机名默认为:origin

三,git的基本操作

cd到想要建立仓库的文件夹里面去,然后输入指令创建仓库

git init

设置用户名

git config --global user.name "输入你的用户名字"

设置邮箱地址

git config --global user.email "输入你的邮箱地址"

其中上面两个指令 --global 是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的 Git 仓库都会使⽤这个配置。如果你希望在不同仓库中使⽤不同的 name 或 e-mail ,可以不要 --global 选项,但要注意的是,执⾏命令时必须要在仓库⾥。

查看配置的用户名和邮箱

git config -l

 删除用户名和邮箱

git config [--global] --unset user.name
git config [--global] --unset user.email

如果添加时加了 --global ,则删除的时候也要加。

添加文件到暂存区

git add 文件名1 文件名2 ...  //添加一个或多个
git add .     //添加当前⽬录下的所有⽂件改动到暂存区:

将暂存区内容添加到本地仓库中

git commit -m "描述本次提交"  //提交暂存区全部内容到本地仓库中
git commit 文件名1 文件名2 ... -m "描述本次提交"   //提交暂存区的指定⽂件到仓库区:

打印提交日志

git log      //可以加上    --pretty=oneline   就可以让每次提交都只打印一行

 在.git文件里面查看文件

git cat-file -p commit的id

查看在你上次提交之后是否有对⽂件进⾏再次修改:修改是对于工作区和暂存区是否相同,如果是修改过的文件名会被打印出来

git status

这段指令是上一个指令中如果被修改了,用这段指令可以查看修改了哪些内容:查看暂存区和工作区的差异

git diff 文件名//这个是扩展,如果查看版本库和⼯作区⽂件的区别
git diff HEAD -- 文件名

查看HEAD指针的移动历史

git reflog

版本回退

git reset [--soft | --mixed | --hard] [HEAD]

每个选项的讲解

--soft: 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。

--mixed: 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,⼯作区⽂件保持不变。

--hard: 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。

HEAD:三种写法

1.  HEAD 表⽰当前版本 ,HEAD^^ 上上⼀个版本

2. HEAD~0 表⽰当前版本,HEAD~2 上上⼀个版本

3. 写成版本号,就是 git log 打印的版本号 ,或者是 git reflog 打印的内容。

撤销修改

情况一:对于⼯作区的代码,还没有 add​​​​​​​

git checkout -- 要撤销的文件名

情况⼆:已经 add ,但没有 commit

方法1:

//先输入
git reset HEAD 文件名
//在输入
git checkout -- 文件名

方法2:

git reset --hard HEAD 文件名

情况三:已经 add ,并且也 commit 了

前提条件是cmmit之后没有push操作

git reset --hard HEAD^

 删除版本库的文件

方法1:

//第一步
rm 文件名
//第二步
git add 文件名
//第三步
git commit -m “描述内容”

方法2:

//第一步,在工作区和缓存区删除文件,然后接下来在提交到版本库
git rm 文件名
//第二步
git commit -m “描述内容”

四,分支管理

查看所有的分支

git branch

创建一个分支名为branch_name的分支

git branch branch_name

 切换到名为branch_name的分支

git checkout branch_name

 创建并切换到branch_name的分支

git checkout -b branch_name

合并冲突:

原因:分支出去的内容被改变,且原支路也被改变,所以造成了合并冲突

处理方法:merge冲突,需要手动解决,并进行一次性提交

注意:提交非常的重要

Fast-forward模式:在合并的时候没有合并冲突

 非Fast-forward模式:在合并的时候有合并冲突

将分支branch_name合并到当前分支:合并后分支还在

git merge branch_name

如果写成这样:意思是如果是Fast-forward模式的merge,也会在用git log --graph --abbrev-commit也会画出分支图来,如果不加就是跟普通提交一样,都会显示是在一条主线上面提交一次代码。

git merge --no-ff -m "描述这次提交" branch_name

因为在合并冲突这个场景下:也需要再提交一次,所以需要添加-m "描述这次提交"。

删除本地仓库的branch_name分支:注意只能在其他的分支上删除branch_name分支

git branch -d branch_name       //注意这里只有merge之后的分支才可以这样删除

用图画出git的管理过程:可以清楚的看见git分支合并的过程

git log --graph --abbrev-commit

bug分支 

这里我们把在开发代码的分支叫做:kaifacode

把修复bug的分支叫做:dbug

意思是如果在开发中已经在新建立的分支上面已经在工作区写了一段代码了,这时候主版本出现了bug,这时候我们建议新建立一个分支去解决bug,然后bug改完然后合并到主版本里面,如果新开发的代码已经写完了,需要合并,这时候直接把新开发的代码合并到主分支会产生合并冲突,所以这里建议不要直接把代码合并到主分支,先把主分支的代码合并到开发的分支里面来,然后再把合并的代码合并到主分支。

上面的解决方案中我们显然遇到了一个问题,我们在kaifacode写代码是写在工作区的,我们这时也没有提交代码,但是我们这个时候要回去修复主分支里面的bug,这时候工作区又有代码,所以我们需要储存这段代码,然后在新的分支修复bug

git stash

然后我们这个时候我们用 git status 指令看工作区就是干净的了,然后我们就去修复bug即可,修复完之后,我们需要恢复之前的之前在工作区开发的新代码,在恢复新代码之前我们先看下面这条指令

git stash list

这时候我们就可以看见我们用 git stash指令储存的代码了

恢复原本已经开发好的代码用下面这条指令:意思是恢复的同时会把 stash 也删了

git stash pop

下面的这段指令进行恢复,但是恢复代码并不会删除stash的内容

git stash apply

我们还要继续删除stash的内容的话,我们的就要执行下面的一段指令

git stash drop

我们都恢复完之后就可以接着写代码了

强制删除分支:如果我们在开发的过程中建立了一个新的分支,但是这时候突然不想要这个分支了, 我们是无法用之前删除分支的指令进行删除这个分支的,我们要用强制删除分支的指令如下

git branch -D branch_name

删除分支名为branch_name的分支 

五,远程操作 

把远程仓库克隆到本地来(注意不要再任意的本地仓库里面执行这条命令)

git clone 仓库的网络地址

查看远程仓库的一些信息,并且还有我们自己的权限是否能推送和拉取代码

git remote -v

把本地的代码推送到远程仓库

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

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

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

如果远程仓库已经被别人修改,我们这时候需要用这条指令来拉取远层仓库的代码

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

# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。

 git pull <远程主机名> <远程分⽀名> 

如果远程仓库没有这个分支,我们本地新建立了一个分支,可以把这个分支推送到远程仓库。(注意这样推送过去的分支,好像和本地的分支不会建立连接

git push origin 要推送的分支名    //和上面的一样,只是少了远程仓库的分支名

忽略文件:.gitignore

我们可以创建一个忽略文件可以让git不追踪我们不需要维护的文件

文件的内容格式这样写:

1.   # 代表注释

2.  *.os 代表以os结尾的文件不能被追踪

3.  !a.os 代表 a.os文件不需要被忽略,所以!表示不能被忽略的文件

强制推送:因为我们可能有想add的文件字母结尾已经在gitignore文件里面被忽略,但是我们又想把文件add进入缓存区,这时候我们就需要用到强制添加了,指令如下

git add -f 文件名

检查gitignore文件:如果我们要添加文件的时候可能add不了,这时候可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,⽐如说 a.so ⽂件是要被添加的,可以⽤下面的命令检查

git check-ignore -v 文件名

 然后文件名记得写上后缀示例:git check-ignore -v a.so

 如果回显    .gitignore:3:*.so a.so   代表在gitignore文件的第三行出现了*.so使a.so文件不能被添加。

六,标签管理 

可以更好的用于版本的管理

查看有哪些标签

git tag

切换到需要打标签的分⽀上,给最近提交的版本添加标签

git tag 标签名

给之前提交的版本打标签

我们要找到之前commit的id值,先用  git log --pretty=online --abbrev-commit 找到commit的id值

在用下面的指令打标签

git tag 标签名字 索引值

打标签的时候并添加上描述

git tag -a 标签名 -m “描述的内容” 要打标签的索引(这个选项不加的话就选择的是最近一次提交的版本)

查看打标签的版本的内容

git show 标签名

删除打的标签

git tag -d 标签名

把标签名推送到远程仓库

git push 远程主机名 要推送的标签名

推送所有的标签名进入远程仓库

git push 远程主机名 --tags

在远程仓库删除标签

先正常用上面的指令在本地删除

然后在用下面的指令

git push 远程主机名 :删除的标签名

注意上面的‘  :  ’ 必须要写,因为:的前面是本地的标签的意思:后面代表远程的标签 

 七,多人协作

 场景1:

条件:在一个分支上协作完成

先在远程仓库上建立一个分支,一台机器在这个分支添加一段代码,另一台机器也在这个分支添加一段代码。 

我们可以先用 git branch 查看本地的分支,然后在用 git branch -r 指令查看在本地的在远程仓库的的分支,先把远程仓库克隆到本地,然后我们在远程仓库中创建新的分支,在拉取到本地来就可以了

git pull 
//这里可以直接拉取,是因为我们是克隆的仓库,远程的master和本地的master分支
已经建立了连接所以我们这里后面不在需要跟一些配置信息

我们在把远程的分支添加到本地来:就是本地仓库和远程仓库建立连接 

git checkout -b 建立的分支名 origin/dev(对应的远程仓库的分支)

我们可以查看本地的分支和远程的分支分别有哪些

git branch -a

查看本地仓库和远程仓库是怎么建立连接的

git branch -vv

 小知识点:建立过连接的分支就可以直接用短命令了如:git push,git pull 

如果已经建立好了本地的分支,这时候我们可以把这个分支与远程仓库建立连接

git branch --set-upstream-to=origin/dev 本地的分支名
//                         远程主机名/远程分支名

如果远程仓库已经被修改了,本地也已经commit了一次,这时候需要先pull一次,然后有冲突解决冲突,然后就可以推送到远程仓库即可。

 远程分⽀删除后,本地 git branch -a 依然能看到的解决办法

当前我们已经删除了远程的⼏个分⽀,使⽤   git branch -a   命令可以查看所有本地分⽀和远程分⽀,但发现很多在远程仓库已经删除的分⽀在本地依然可以看到。

git remote show origin       //可以查看remote地址,远程分⽀,还有本地分⽀与之相
对应关系等信息。

然后根据我们上面的指令打印出来的内容的提示,输入以下指令,我们可以在本地的远程仓库实现删除gitee(远程仓库) 上面已经删除的分支

git remote prune 远程主机名    //这样就删除了那些远程仓库不存在的分⽀ 

然后本地仓库里面要删除分支前面已经讲过了。

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

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

相关文章

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具&#xff0c;支持更强大的构建功能&#xff0c;特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx&#xff0c;可以在单台设备上构建…

C# 数据类型详解:掌握数据类型及操作为高效编码奠定基础

本文将带你深入了解C#中各种数据类型的特点、用途和最佳实践&#xff0c;让你不仅能熟练运用基本类型&#xff0c;还能掌握如何在实际项目中做出最合适的选择。 目录 C#基本语法 C#数据类型 C#类型转换 C#变量常量 C#基本语法 在学习C#之前我们要先知道C#的基础构建是由哪些…

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…

Istio笔记01--快速体验Istio

Istio笔记01--快速体验Istio 介绍部署与测试部署k8s安装istio测试istio 注意事项说明 介绍 Istio是当前最热门的服务网格产品&#xff0c;已经被广泛应用于各个云厂商和IT互联网公司。企业可以基于Istio轻松构建服务网格&#xff0c;在接入过程中应用代码无需更改&#xff0c;…

uniapp运行时,同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。

遇到自定义基座调试时安装无效或无反应&#xff1f;本文教你用 ADB 工具快速解决&#xff1a;打开 USB 调试&#xff0c;连接设备&#xff0c;找到应用包名&#xff0c;一键卸载问题包&#xff0c;清理干净后重新运行调试基座&#xff0c;轻松搞定&#xff01; 问题场景&#…

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印&#xff0c;还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索&#xff0c;DWG To PDF.pc3 &#xff0c;获取到文件目录 &#xff0c;替换到代码中&#xff0c; originalValue ACADPref.PrinterConfigPath \ r"C:…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

centos8:Could not resolve host: mirrorlist.centos.org

【1】错误消息&#xff1a; [rootcentos211 redis-7.0.15]# yum update CentOS Stream 8 - AppStream …

Android笔记(三十四):封装带省略号图标结尾的TextView

背景 项目需求需要实现在文本末尾显示一个icon&#xff0c;如果文本很长时则在省略号后面显示icon&#xff0c;使用TextView自带的drawableEnd可以实现&#xff0c;但是如果文本换行了则会显示在TextView垂直居中的位置&#xff0c;不满足要求&#xff0c;于是有了本篇的自定义…

CEF127 编译指南 Linux篇 - 安装Git和Python(三)

1. 引言 在前面的文章中&#xff0c;我们已经完成了基础开发工具的安装和配置。接下来&#xff0c;我们需要安装两个同样重要的工具&#xff1a;Git 和 Python。这两个工具在 CEF 的编译过程中扮演着关键角色。Git 负责管理和获取源代码&#xff0c;而 Python 则用于运行各种编…

centos系统设置本地yum源教程

在CentOS系统中,将ISO文件设置为本地源可以加快软件安装速度,特别是在没有网络连接的环境下。以下是详细步骤: 1. 下载和准备ISO镜像文件 首先,从CentOS的官方网站下载适合需求的CentOS ISO镜像文件。可以选择不同的版本,如CentOS 7或CentOS 8,以及适合你硬件架构的版本…

PDF view | Chrome PDF Viewer |Chromium PDF Viewer等指纹修改

1、打开https://www.browserscan.net/zh/ 2、将internal-pdf-viewer改为 internal-pdf-viewer-jdtest看下效果&#xff1a; 3、源码修改&#xff1a; third_party\blink\renderer\modules\plugins\dom_plugin_array.cc namespace { DOMPlugin* MakeFakePlugin(String plugin_…

模糊认知图模型、特征与推理

1. 基础知识 1.1认知图的发展 1948年&#xff0c;Tolman首次提到认知图&#xff3b;I]它把认知图描述为有向图&#xff0c;认为认知图是由一些弧连接起来的结点的集合&#xff0c;其目的是为心理学构建一个模型。后来&#xff0c;认知图被其他学者所借用&#xff0c;不同的学…

Mac 环境下类Xshell 的客户端介绍

在 Mac 环境下&#xff0c;类似于 Windows 环境中 Xshell 用于访问 Linux 服务器的工具主要有以下几种&#xff1a; SecureCRT&#xff1a; 官网地址&#xff1a;https://www.vandyke.com/products/securecrt/介绍&#xff1a;支持多种协议&#xff0c;如 SSH1、SSH2、Telnet 等…

玩转 uni-app 静态资源 static 目录的条件编译

一. 前言 老生常谈&#xff0c;了解 uni-app 的开发都知道&#xff0c;uni-app 可以同时支持编译到多个平台&#xff0c;如小程序、H5、移动端 App 等。它的多端编译能力是 uni-app 的一大特点&#xff0c;让开发者可以使用同一套代码基于 Vue.js 的语法编写程序&#xff0c;然…

【西瓜书】支持向量机(SVM)

支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;。 超平面 分类学习最基本的想法就是基于训练集合D在样本空间中找到一个划分超平面&#xff0c;将不同类别的样本分开。 但能将训练样本分开的划分超平面可能有很多&#xff0c;应该努力去找到哪…

【开源免费】基于SpringBoot+Vue.JS宠物咖啡馆平台(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 064 &#xff0c;文末自助获取源码 \color{red}{T064&#xff0c;文末自助获取源码} T064&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件&#xff0c;适用多种应用场景&#xff0c;可快速组合算法&#xff0c;实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀&#xff0c;自带强大的视觉分析工具库&#xff0c;可…

Linux内核编译流程(Ubuntu24.04+Linux Kernel 6.8.12)

万恶的拯救者&#xff0c;使用Ubuntu没有声音&#xff0c;必须要自己修改一下Linux内核中的相关驱动逻辑才可以&#xff0c;所以被迫学习怎么修改内核&编译内核&#xff0c;记录如下 准备工作 下载Linux源码&#xff1a;在Linux发布页下载并使用gpg签名验证 即&#xff1a…

UE5 打包报错 Unknown structure 的解决方法

在虚幻引擎5.5 打包报错如下&#xff1a; UATHelper: 打包 (Windows): LogInit: Display: LogProperty: Error: FStructProperty::Serialize Loading: Property ‘StructProperty /Game/Components/HitReactionComponent/Blueprints/BI_ReactionInterface.BI_ReactionInterface…