Git【版本控制命令】

02 【本地库操作】

1.git的结构

image-20221006131836575

image-20220827212525927

2.Git 远程库——代码托管中心

2.1 git工作流程

代码托管中心用于维护 Git 的远程库。包括在局域网环境下搭建的 GitLab 服务器,以及在外网环境下的 GitHub 和 Gitee (码云)。

一般工作流程如下:

1.从远程仓库中克隆 Git 资源作为本地仓库。

2.从本地仓库中checkout代码然后进行代码修改

3.在提交前先将代码提交到暂存区。

4.提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。

5.在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。

团队内部协作

image-20220827212710234

跨团队协作

image-20220827212722660

2.2 Github:开源社区

Github线上仓库结构介绍

image-20221006132339079

Github Issues

作用:发现代码BUG,但是目前没有成型代码,需要讨论时用;或者使用开源项目出现问题时使用

fork与git clone的区别

1.区别

git clone 是在自己电脑直接敲命令,结果是将github仓库中的项目克隆到自己本地电脑中了(就是下载过来)

fork是直接访问github网站,在项目页面中点击fork,然后自己github项目中就会多出一个复制的项目

2.用法

如果我们想要修改他人github项目的话,我们直接git clone代码到本地是不能push的,所以我们使用fork,先把代码复制到自己的github仓库,然后git clone到本地修改,然后在提交push(这里的push是push到自己github仓库了,我们自己的github仓库中的代码是fork源的一个分支),这时候我们想要把修改的代码提交给他人的话,就可以在自己github上pull requests,等其他人看到后就可以把代码做一个合并

3.初始化配置

以本地计算机的G:\Desktop\git的工作目录,在其中新建一个项目文件夹git_demo后打开。

执行git init对git存储库初始化

查看.git文件夹中的信息

文件./.git/config用于记录该本地库的配置信息。

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡 乱修改。

3.1 设置签名

签名由user. name (用户名)和user. email (Email地址)组成,用于对不同开发者的身份作区分,包括项目/仓库级别、系统用户级别。

这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
项目/仓库级别与系统用户级别必须有一个设置生效。

3.1.1 项目/仓库级别

具有更高的优先级签名;
各个本地库的签名信息相互独立,互不干扰。

git config user.name "dselegent"
git config user.email dselegent@qq.com

配置文件的修改保存在:<Project>/.git/config文件中。

image-20220827214121295

3.1.2 系统用户级别

若未设置项目/仓库级别的签名时,使用用户级别的签名。

git config --global user.name "dselegent"
git config --global user.email dselegent@qq.com

配置文件的修改保存在:~/.gitconfig文件中。

image-20220827214440210

级别优先级

  • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
  • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
  • 二者都没有不允许

3.2 配置编辑器

使用命令git config [--global | --system] core.editor [...]为 Git 的配置编辑器。

3.3 配置信息

使用命令git config --list查看 Git 的配置信息。

image-20220827214826684

4.版本控制

4.1 在项目中新建文件

G:\Desktop\git中新建文件test1.txt后打开。

hello git!
4.1.1 查看状态

使用git status查看工作区、暂存区状态

image-20211126104411928

对于master分支,本地库暂未有任何被提交的内容、暂存区亦未有任何可提交的内容(可用git add命令追踪新建的文件), 存在未追踪的文件test1.txt (可用git add <file>... 命令将文件载入暂存
区以待提交)。

4.1.2 添加到暂存区

git add test1命令将文件test1.txt添加到暂存区。

警告:此时根据转换文本文件行尾换行的配置,默认按照Windows风格检出后用Unix的风格替换提交(将LF转换为CRLF) ,本地工作目录不受这一替换的影响。

对于master分支,本地库暂未有任何被提交的内容、暂存区有以下新文件的改变可被提交:test1.txt (可用git rm --cached <fi1e>... 命令将文件撤出暂存区)。

从暂存区撤出文件的命令不会影响工作区的文件。

touch 文件名 创建文件

git add 文件名 将文件添加到暂存区

git add 文件名1 文件名2 文件名3 将多个文件添加到暂存区

git add . 添加当前目录下的文件到缓存区,注意有空格在.前面

4.1.3 提交到本地库

git commit test1 -m 'first commit'命令将文件test1.txt提交到本地库。

master分支上创建了一个根提交(ID号:da56888) 。注释内容为: first commit 。这次提交修改/新建了1个文件,插入了1行内容。

对于master分支,暂存区暂未有任何可提交的内容,工作目录的文件系统树完全一致。

4.2 修改文件内容

对文件test.txt做出 1 处修改后保存:

hello git!
second
4.2.1 查看状态

对于master分支,存在未暂存的修改: test1.txt (可用git add <file>... 命令将文件更新到
暂存区以待提交或用git restore <file>... 命令丢弃工作目录的更改)。暂存区没有可提交的修改(可用git add 命令将修改添加到暂存区或用git commit -a 将修改暂存后立即提交)。

4.2.2 添加到暂存区

image-20220827215839107

4.2.3 提交修改到本地库

使用git commit text -m "My second commit”命令提交修改到本地库,而不必单独用编辑器注释修改。

image-20220827220146316

4.3 查看提交的版本记录

image-20220827220308190

每一个提交记录(commit)都有一个hash值作为提交记录的键,与提交人、提交时间以及提交注释对应。在当前的版本中,有(HEAD -> master)的标记,即用HEAD指针指向当前版本。

版本间的切换通过移动HEAD指针完成。

若日志信息太多,可用空格键向下翻页、b键向上翻页、q键退出。

  • 可用git 1og --pretty=oneline 命令以每个提交历史仅占1行的方式显示日志;

  • 可用git 1og --oneline命令显示更简略的日志信息,此时只截取显示40位hash值的前7位;

  • 可用git reflog 命令显示带HEAD指针移动次数的简略信息。.

git reflog命令可显示HEAD指针前后的全部提交日志;其他日志查看命令只显示从当前版本往后的提交日志。

DS@DS MINGW64 /g/Desktop/git/git_demo (master)
$ git log --pretty=oneline
a087691b1b36033551860de2923512caaa593b06 (HEAD -> master) My second commit
da568881807198113fa60debe615bcd0cc7834e1 first commit

DS@DS MINGW64 /g/Desktop/git/git_demo (master)
$ git log --oneline
a087691 (HEAD -> master) My second commit
da56888 first commit

DS@DS MINGW64 /g/Desktop/git/git_demo (master)
$ git reflog
a087691 (HEAD -> master) HEAD@{0}: commit: My second commit
da56888 HEAD@{1}: commit (initial): first commit

4.4 版本的切换

版本前进后退的本质是HEAD指针的位置的移动。

4.4.1 版本的直达

使用git reset --hard <hash_len_7>命令。

4.4.2 版本后退

方法一

使用git reset --hard HEAD[^...]执行版本的后退(每个^符号后退 1 版,不加^符号则恢复成当前指针所指位置的状态)。

git reset --hard HEAD^ 表示回退一个版本

git reset --hard HEAD^^ 表示回退两个版本

git reset --hard HEAD^^^ 表示回退三个版本

git reset --hard HEAD^^^^ 表示回退四个版本

image-20220827221518210

方法二

使用git reset --hard HEAD~[NumberOfSteps]执行版本的前进(~符号后的数字注明了连续后退的步数)。

git reset --hard~3 表示回退三个版本

image-20220827222013161

做了第三次提交之后才回退版本

4.4.3 reset 命令的 3 个参数

使用git help <command>命令用浏览器查看特定命令的本地帮助文件,如git help reset

–soft
仅在本地库移动HEAD指针。

image-20220827222244789

–mixed

在本地库移动HEAD指针,且重置暂存区。

image-20220827222307688

–hard

在本地库移动HEAD指针,且重置暂存区和工作区。

image-20220827222526891

4.5 文件的删除与找回

前提:文件存在时的状态提交到了本地库。
核心:
1.文件删除前已提交到本地库:git reset --hard <HistoricalRecords>
2.文件删除前未提交到本地库:git reset --hard HEAD

4.5.1 创建待删除文件

创建test2.txt文件,并写入一行内容:test2。

添加到暂存区后提交:

image-20220827222902821

4.5.2 删除文件

删除文件

rm -rf 文件名 通知要删除某文件

git rm 文件名 删除缓存区的该文件

git reset . 清空暂存区所有文件

git commit -m"注释" 将仓库文件删除

使用rm test2.txt命令删除test2.txt文件。

image-20220827223002700

删除后的状态

image-20220827223027325

暂存并提交

image-20220827223136817

4.5.3 找回文件

将版本回退到删除文件前的那个版本,即可完成对文件的找回。

image-20220827224402028

若文件的删除变化只添加 (add) 到了暂存区而未提交 (commit) 到本地库,则可使用git reset --hard HEAD命令找回文件。

4.6 文件差异性比较

对于test1.txt文件,修改前:

image-20220827224506801

修改后:

image-20220827224545434

  • 使用git diff <filename>命令默认用于当前文件与暂存区对应文件的差异比较:

  • 若使用git diff <hash_len_7|HEAD|HEAD^[^...]> <filename>命令,则可用于当前文件与特定历史版本或已暂存前文件的差异比较。

  • 使用不带文件名的diff命令则可比较工作区的所有文件。

image-20220827224705855

4.7 分支管理

Git 分支是由指针管理起来的,可以快速创建、切换、合并与删除,适用于大型项目的开发。在分支上开发,调试后合并到主分支的策略使每个人的开发模块式相互独立不影响到其他人。
1.主分支(默认的master分支)只用来发布重大版本更新(各版本可以有不同的标签以便于查找);
2.日常开发应该在其他分支上完成,如develop
3.对于新增功能 (feature) 、用于预发布 (release) 、Bug 修复 (bug/hot_fix) 的临时性分支,应在使用完毕后及时删除,以免分支的混乱。
4.多人开发时,可分别创建自己专属的分支,当阶段性工作完成后应该合并到上级分支。

image-20220827224809698

4.7.1 创建分支

使用git branch <BranchName>命令创建名为<BranchName>的新分支,如git branch hot_fix

4.7.2 查看分支

使用git branch -v命令可查看分支的详细 (verbose) 信息(哈希值和名称)。

image-20220827224931315

列出全部分支后,分支名称前以星号*标注的是当前分支。
当前分支已在各命令行的括号()中提及。

4.7.3 切换分支

使用git checkout <BranchName>切换到指定分支,如git checkout hot_fix

image-20220827225046032

4.7.4 合并分支

hot_fix分支中产生修改:

image-20220827225236563

使用git checkout master命令切换到接受合并的分支后,在使用git merge <BranchName>命令合并分支:

image-20220827225451370

4.7.5 分支合并的冲突产生

分支的同一位置同时发生不同的修改时,将在相互合并分支时产生冲突。需要执行手动的冲突解决。
hot_fix分支上修改,添加到暂存区后提交:

image-20220827225832007

master分支中的同一位置做出不同的修改,添加到暂存区后提交

image-20220827230801336

并尝试将hot_fix合并到master

image-20220827230808987

自动合并失败;需要手动修复冲突,然后提交结果。

4.7.6 分支合并的冲突解决

image-20220827230851233

不同于 SVN,Git 产生冲突后,不会产生新的额外文件。

对于产生冲突的文件,Git 会在冲突发生出做出特定的标记:

image-20220827230923330

hello git!
ds
<<<<<<< HEAD         ---
hot_fix2:master		 --- 这是当前分支的内容
=======				
hot_fix2			---
>>>>>>> hot_fix		 --- 这是用于合并的内容

1.编辑文件,删除特殊符号,把文件修改到满意为止后保存退出;
2.使用git add <filename>命令将此文件添加暂存区;
3.使用git commit -m "fix merge"命令提交冲突修复(执行冲突修复时不能添加具体的文件名)。

image-20220827231307442

4.7.7 删除分支

注意在删除分支时要退出该分支

1 先切换到别的分支: git checkout master

2 删除本地分支: git branch -d hot_fix

3 若是删除不了能够强制删除,git branch -D hot_fix

4 有必要的状况下,删除远程分支:git push origin --delete hot_fix

image-20220827231520070

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型创新企业集结!百度智能云千帆AI加速器Demo Day启动

新一轮技术革命风暴席卷而来&#xff0c;为创业带来源源不断的创新动力。过去一年&#xff0c;在金融、制造、交通、政务等领域&#xff0c;大模型正从理论到落地应用&#xff0c;逐步改变着行业的运作模式&#xff0c;成为推动行业创新和转型的关键力量。 针对生态伙伴、创业…

基于STM32开发的智能机器人导航系统

目录 引言环境准备智能机器人导航系统基础代码实现&#xff1a;实现智能机器人导航系统 4.1 距离传感器数据读取4.2 电机控制4.3 实时路径规划与避障4.4 用户界面与状态显示应用场景&#xff1a;智能机器人导航与控制问题解决方案与优化收尾与总结 1. 引言 智能机器人导航系…

五款软件推荐:U盘数据不小心删除了?帮你快速找回!

U盘数据不小心删除了怎么恢复&#xff1f;U盘是一种便携式存储设备&#xff0c;因其小巧轻便而广受欢迎。但是&#xff0c;U盘也常常会遇到数据丢失的问题。当U盘数据丢失时&#xff0c;需要找到一款可靠的数据恢复软件来恢复数据。 接下来为大家推荐5款好用的免费U盘数据恢复软…

Django更改超级用户密码

Django更改超级用户密码 1、打开shell 在工程文件目录下敲入&#xff1a; python manage.py shell再在python交互界面输入&#xff1a; from django.contrib.auth.models import User user User.objects.get(username root) user.set_password(123456) user.save()其中ro…

c++中, 直接写浮点数, 是float 还是 double?

如果直接一个浮点数, 那么他默认是float还是double呢? 测试用例 #include <iostream> using namespace std;int main() {auto x 0.2;float f 0.2;double d 0.2;cout << "x Size : " << sizeof(x) << " bytes" << endl…

关于人生规划(下)

&#xff08;关于人生规划(3)&#xff09; &#xff08;关于人生规划(4)&#xff09; 没有补充能量的后防线级别的大本营&#xff0c;是没办法长时间在外奋斗的。无论如何消耗能量&#xff0c;回到家里就可以补充能量。 无论你是单身还是结婚状态&#xff0c;家一定是一个非常温…

像素坐标系与图像坐标系

前言 在数字图像处理中&#xff0c;经常会看到使用 (x, y) 表示图像中的某个像素点。 在一些图像处理库&#xff0c;例如 Pillow 、OpenCV 、Numpy 中也会使用到坐标系处理图像的像素点。 介绍 无论是像素坐标系还是图像坐标系&#xff0c;其原理都是一样的&#xff1a; 以…

BC8 十六进制转十进制

BC8 十六进制转十进制 废话不多说上题目&#xff1a; 代码如下&#xff1a; #include<stdio.h> int main() {printf("%15d", 0XABCDEF);return 0; }这里总结下C语言的常见语法点&#xff1a; 1&#xff1a;%m.n&#xff0c;m表示整个数值占多少位包括小数点&am…

CloudFlare 防火墙规则里开放合法 Bot 爬虫的方法

明月使用 CloudFlare 也算是有一阵子了,可以说效果非常好更是非常满意,毕竟每天成千上万的 Web 攻击和 cc 攻击都能控制在几乎可以忽略不计的程度了,上次因调试需要关闭了国内线路上的网站卫士统计图覆对比就很能说明这点儿: 这是关闭防火墙当天的实时防御统计结果 这是开启…

【BUG】已解决:Could not find a version that satisfies the requirement tensorflow

已解决&#xff1a;Could not find a version that satisfies the requirement tensorflow 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;同时是武汉城市开发者社区主理人 擅长.net、C…

一定要了解的 WordPress 数据库中默认 12 个表

WordPressan 安装的时候会有 12 张默认的数据表,每张表的数据都包含了 WordPress 不同的功能。看看这些表的结构,你能很容易的了解网站不同的部分都是存在哪里的。目前,默认的 WordPress 安装会创建如下的数据表。 注意:每张表名前面的 wp_ 是你在安装过程中选择的数据库前…

山水有相逢 来日皆可期

毕业接踵而至&#xff0c;大家都在拍照记录留恋毕业的美好时光碎片。但由于最近实在“玩得太嗨”&#xff0c;无心拍毕业照。 默海笑&#xff0c;当然是需要用自己的方式来为这浑浑噩噩的大学生活画上句号。 我相信&#xff0c;毕业时的你我都会无比的感慨&#xff0c;为什么时…

深度网络及经典网络简介

深度网络及经典网络简介 导语加深网络一个更深的CNN提高识别精度Data Augmentation 层的加深 经典网络VGGGoogLeNetResNet 高速学习迁移学习GPU分布式学习计算位缩减 强化学习总结参考文献 导语 深度学习简单来说&#xff0c;就是加深了层数的神经网络&#xff0c;前面已经提到…

关于stm32的软件复位

使用软件复位的目的&#xff1a; 软件复位并不会擦除存储器中的数据&#xff0c;它只是将处理器恢复到复位状态&#xff0c;即中断使能位被清除&#xff0c;系统寄存器被重置&#xff0c;但RAM和Flash存储器中的数据保持不变。 STM32软件复位(基于库文件V3.5) &#xff0c;对…

英特尔:AI落地,未来已来

引言 随着AI技术的发展和大模型的普及&#xff0c;人工智能正在逐渐渗透到我们的日常生活中。2023年5月底&#xff0c;我参加了台北的英特尔技术展&#xff0c;深入了解了英特尔在AI个人电脑领域的最新进展。本文将详细介绍英特尔的新一代移动处理器Lunar Lake&#xff0c;以及…

笔记-Python中的struct模块

了解c语言的人&#xff0c;一定会知道struct结构体在c语言中的作用&#xff0c;它定义了一种结构&#xff0c;里面包含不同类型的数据(int,char,bool等等)&#xff0c;方便对某一结构对象进行处理。而在网络通信当中&#xff0c;大多传递的数据是以二进制流&#xff08;binary …

《Brave New Words 》1.1 抛弃瓶子

Part I: Rise of the AI Tutor 第一部分&#xff1a;AI 导师的崛起 A great teacher can teach calculus with a paper clip and literature in an empty field. Technology is just another tool, not a destination. —Unknown 一位伟大的教师可以用回形针教微积分&#xff0…

【线性代数】向量空间,子空间

向量空间 设V为n维向量的集合&#xff0c;如果V非空&#xff0c;且集合V对于向量的加法以及数乘两种运算封闭&#xff0c;那么就称集合V为向量空间 x&#xff0c;y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…

基于栅格占据概率和距离场的机器人覆盖轨迹模拟

基于栅格占据概率和距离场的机器人覆盖轨迹模拟 简介 辐射场模型实现 理论基础 指数函数建模 我们使用指数函数来表示机器人在某个栅格上停留时间对覆盖概率的影响: p ( t ) 1 − e − λ t p(t) 1 - e^{-\lambda t} p(t)1−e−λt 其中 λ \lambda λ 是控制增长速率…

中国宠业新锐品牌展,2024苏州国际宠物展6月28日开展!

中国宠业新锐品牌展&#xff0c;2024苏州国际宠物展6月28日开展&#xff01; ​ 第2届华东国际宠物用品展览会(苏州)暨中国宠业新锐品牌展&#xff0c;将于6月28日-30日在苏州国际博览中心盛大举办&#xff0c;锁定年中市场黄金档期&#xff0c;同期以“NB展&#xff0c;更新鲜…