【Git原理与使用】版本管理与分支管理(1)

news2024/11/13 10:06:03

目录

一、基本操作

1、初识Git

2、Git安装[Linux-centos]

3、Git安装[ Linnx-ubuntu]

4、创建git本地仓库

5、配置Git

6、认识工作区、暂存区、版本库

7、添加文件

8、查看历史提交记录

9、查看.git文件目录结构

10、查看版本库对象的内容

11、小结(在本地的.git仓库中,有几个文件或者目很特殊)

12、修改文件

13、版本回退

14、撤消修改

15、删除文件

二、分支管理

1、master主分支

 2、HEAD

3、创建分支

4、切换分支

5、合并分支

6、删除分支

7、合并冲突

8、合并模式

9、分支策略

10、bug分支

11、删除临时分支

三、远程操作

1、理解分布式版本控制系统

2、远程仓库

3、新建远程仓库

4、克隆远程仓库

5、向远程仓库推送

6、拉取远程仓库

7、忽略特殊文件

8、给命令配置别名

四、标签管理

1、理解标签

2、创建标签

3、操作标签


一、基本操作

1、初识Git

(1)随着版本的不断增多,维护好版本是很有挑战的。各自的版本修改的内容是什么我们是不知道的,但是可以借助版本管理控制器Git。

(2)版本管理控制器:记录每次的修改以及版本迭代的一个管理系统。

(3)Git可以控制电脑上所有格式的文档,但是只能跟踪文本文件的改动,而图片视频等二进制文件到底改了没有,版本控制器系统不知道(修改图片也就只知道图片从100KB到120KB大小变化)Git是目前最主流的版本控制器,是开放源代码的代码托管工具。

2、Git安装[Linux-centos]

(1)查看是否安装git: git

(2)安装Git: sudo yum -y install git   【yum就相当于是centos应用商店,-y表示同意所有要求】

(3)查看Git安装的版本:git --version

3、Git安装[ Linnx-ubuntu]

(1)查看是否安装git: git

(2)安装git: sudo apt-get install git -y【apt-get也相当于是ubantu的应用商店】

(3)卸载:sudo apt-get remove git -y

(4)查看git安装的版本:git --version

4、创建git本地仓库

(1)仓库是进行版本控制的一个文件目录:我们想要对文件进行版本控制,就必须先创建一个仓库出来

(2)创建gi本地仓库git init,注意命令要在文件目录下执行。

(3).git目录是Git来跟踪管理仓库的,不要手动修改这个目录里面的文件,改乱了就把Git仓库给破坏了

5、配置Git

(1)当安装git后首先要做的事情就是设置你的用户名称和email地址,这是非常重要的,配置命令为:

//设置用户名称

git config [--global] user name "zhangsan"

//设置email地址

git config [--global] user email "247xxxxx@ qq.com"

其中--global是可选项,使用了该选项,表示这台机器上所有git仓库都会使用这个配置。

(2)查看设置命令为:

git config -l

(3)删除对应的配置命令为:

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

PS:使用--global新增的配置,在删除时同样需要使用--global

6、认识工作区、暂存区、版本库

(1)解释:

①工作区:本地上写的代码或文件的目录暂存区。

②暂存区(stage/index):一般存放在.git目录下的index文件中,有时称作索引,是因为存放的是commit id【每次提交的内容都会有commit id】

③版本库:又名仓库(repository)。工作区有一个隐藏目录.git,它不算工作区,而是git的版本库。版本库中的所有文件都可以被git管理起来。

(2)三者关系

①在创建git版本库时,就会自动创建一个唯一的master分支,以及指向master分支的一个HEAD指针

②通过新增或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。比须要通过git add(进暂存区)和git commit命令(进版本库)才能将文件添加到仓库中进行管理

③修改的工作区内容会写入对象库的一个新的git对象中。

7、添加文件

(1)git add file/dir  添加文件/目录

(2)git add .   【注意这个“.”】 添加当前目录下的所有文件改动到暂存区

(3)git commit -m  “第一次提交”       提交暂存区全部内容到本地仓库中

(4)git commit [file] -m “第一次提交”          指定文件到本地仓库中

PS:-m选项,要跟上描述本次提交的信息,记录提交细节

8、查看历史提交记录

git log [--pretty=oneline]

9、查看.git文件目录结构

tree  .git/

10、查看版本库对象的内容

git  cat-file -p  comnit-id 

11、小结(在本地的.git仓库中,有几个文件或者目很特殊)

①index:暂存区,git add后会更新该内容

②HEAD:默认指向master分支的一个指针

③refs /heads/master:文件里保存当前master分支的最新的commit id

④objects:包含了创建的各种版本库对象以及内容,可以简单理解为放了git维护的所有修改 

12、修改文件

(1)Git跟踪并管理的是修改,而非文件

(2)vim ReadMe    #编辑

        cat ReadMe   #查看

(3) git status    #查看当前仓库的状态

13、版本回退

(1)执行git reset命令用于回退版本,可以指定退回某一次提交的版本。“回退”本质是要将版本库中的内容进行回退,工作区或暂存区是否回退由命令参数决定

(2)git reset命令语法格式:git reset [--soft | --mixed l --hard ]  [HEAD]

①--mixed为默认,使用时可不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变

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

③--hard参数将暂存区与工作区都退回到指定版本。切记工作有未提交的代码时不要用这个命令,因为工作区会回滚

14、撤消修改

(1)对于工作区的代码,还未add

①直接vim文件名删代码(不推荐,易出错)

git checkout -- 文件名        #恢复到上一次add或commit,丢弃工作区的修改

(2)已经add.但未commit

git reset 回退命令使用--mixed参数,可以将暂存区的内容退回为指定版本,但工作区会不变。然后再丢弃工作区的修改

(3)已经add,也commit

回退上一个版本:git reset --hard HEAD^

15、删除文件

不仅要删工作区中的,还需要考虑版本库中是否删除。

git rm files

git commit -m "deleted files"

使用git rm将文件从暂存区和工作区中删除,并且commnit.




二、分支管理

1、master主分支

在版本回退里,每次提交,Git都把它们串成一条时间线,这条时间线就可以理解为是一个分支,截止目前只有一条时间线,在git里,这个分支叫主分支,即master分支

 2、HEAD

HEAD指向master,master指向最新一次提交

3、创建分支

git branch           #查看当前本地所有分支

git branch dev    #新建分支dev 

4、切换分支

 git checkoout dev     #切换到dev分支

5、合并分支

(1)为了在master主分支上能看到新的提交就将dev分支合并到master分支

git merge dev   #在master分支上合并dev分支

(2)Fast-forward代表“快进模式”,也就是直接把master指向 dev的当前提交,所以合并速度非常快,当然也不是每次合并都能Fast-forword

6、删除分支

(1)合并完成后,dev分支对于我们来说就没用了,那么dev分支就可以被删除,但如果当前正处于某分支下,就不能删当前分支,可以在其他分支下删除。

(2) git branch -d dev      #删除dev分支

7、合并冲突

(1)实际分支合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的时候。

(2) dev分支下修改ReadMe文件时,又在master分支修改了同样的ReadMe文件,此时的合并就可能发生冲突。发现Readme文件有冲突后,可以直接查看文件内容,要说的是git会用<<<<<,=======,>>>>来标记出不同分支的冲突内容,重要此时我们需要手动调整密码,并再次提交修正后的结果

(3)用带参数的git log也可以看到分支的合并情况,具体如下:

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

8、合并模式

(1))通常合并分支时,如果可能,git会采用fastforward模式。在这种模式下,删除分支后,查看历史个分支历史时,会丢掉分支信息,看不出最新提交到底是merge进来的还是正常提交的

不使用fast forward模式:

git merge  --no-ff  -m   "merge dev2" dev2

(2)普通模式合并,合并后的历史有分支,能看出来曾经做过合并。

9、分支策略

(1)可供多人协作开发,开发完毕后合并到master主分支

(2)在实际开发中,几个基本原则进行分支管理

①master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面改代码

②开发人员有自己独有的开发分支,可往dev分支上合并

10、bug分支

(1)假如我们现在正在dev2分支上进行开发,开发到一半,突然发现master分支上面有bug,需要解决。在git中,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除 

(2)可现在dev的代码在工作区中开发了一半,还无法提交,怎么办呢?git提供了git stash命令,可以将当前的工作区信息进行储藏,被储藏的内容可以在将来某个时间恢复出来,再使用git status查看工作区,就是干净的(除非有没有被git管理的文件),因此可以放心地创建分支来修复bug

(3)储藏dev2工作区之后,由于我们要基于master分支修复bug,所以需要切回master分支,再新建临时分支来修复bug

git cheekout master    #切回到master

git checkout -b fix_bug    #新建并切换到fix-bug分支

③    #修复bug

④   #重新add,commit

修复完成后,切换到master分支,并完成合并,最后删除fix_bug分支

git checkout master

git merge --no-ff  -m "merge fix-bug branch"  fix-bug

至此,bug的修复工作已经完成了,还要继续回到dev2分支进行开发。

git checkout dev2

git status

git stash list   #查看工作现场

git stash pop   #恢复现场同时会把stash删除

git stash apply   #恢复现场不删除stash内容,可用git stash drop

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令

git stash  apply  stash@{0}

11、删除临时分支

(1)软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码把主分支搞乱了,所以,每添加一个新功能,最也新建一个分支,将其称为feature分支,在上面开发完成后合并,最后,删除该feature分支。

(2)如果我们今天正在开发某个feature分支开发了一半后,被产品经理叫停。feature分支白干,就地销毁,这时使用传统的git branch -d命令删除分支是不行的。会提醒未合并!必须使用 git branch -D dev3强制删除




三、远程操作

1、理解分布式版本控制系统

(1)上述所有内容(工作区、暂存区、版本库等)都是在本地,而9it其实是分布式版本控制系统!

(2)分布式版本控制系统可以简单理解为我们每个人的电脑上都是一个完整的版本库,这样你工作时,就不need联网了,因为版本库就在你自己的电脑上。

(3)分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了(比如运气差、硬盘坏了,代码丢失,包_括git的所有内容)

2、远程仓库

(1)qit是分布式版本控制系统,同一个git仓库,可以分布到不同的机器上。实际情况是找一台电脑充当服务器的角色,每天24H开机,其他人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送 到服务器仓库里,也从服务器仓库中拉取别人的提交

(2)github是提供git仓库托管服务的,所以只要注册一个qithub账号,就可以免费获得9i4远程仓库。github是国外的网站,速度比较慢,可用gitee码云来托管代码

3、新建远程仓库

按照自己的需求创建就好

4、克隆远程仓库

(1)克隆/下载远程仓库到本地,需要使用git clone命令,后面跟上我们远端仓库的链接。

(2)SSH协议和HTTPS协议是git最常使用的两种数据传输协议。SSH协议使用了公钥加密和公钥登录机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放上服务器,由git服务器进行管理。使用HTTPS方式时,没有要求可以直接克隆下来

①HTTPS方式

git clone  hoops://gitee.com/

②使用SSH方式

a、创建ssH_key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id-rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,需要创建SSHkey:

ssh  -keygen  -t  rsa  -C "247xxxxxxx@qq.com" 顺利的话,可以在用户主目录里找到.ssh目录,里面有id-rsa和id-pub两个文件,这两个文件就是ssh-key的密钥对,id_rsa是私钥,不能泄露。

ls  -a  .ssh/

b.添加自己的公到远程仓库

c.git clone   ssh链接

(3)当我们从远程仓库克隆后,实际上git会自动把本地的master分支和远程的master分支对应起来,并且远程仓度库的默认名称是origin。在本地我们可以使用 git remote命令,来查看远程库的信息

git remote -v

5、向远程仓库推送

将本地仓库的内容提交到远程仓库

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

git push <远程主机名>  <本地分支名>     #如果本地分支名与远程分支名相同,则可以省略冒号

git push origin master       #将本地的master分支推送到origin主机的master分支

6、拉取远程仓库

(1)若远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。git提供了git pull命令

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

git pul <远程主机名>   <远程分支名>      #如果远程分支是与当前分支同名,则冒号后的可省

7、忽略特殊文件

(1)在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让git知道呢?在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件

(2)但如果你就是想添加某个被.gitignore忽略文件,则使用git add -f [filename]强制添加。but不推荐因为破坏了.gitignore的规则

8、给命令配置别名

将git statns 简化为git st,对应的命令为:

git config --global  alias.st  status

alias是别名的意思




四、标签管理

1、理解标签

标签tag,可以简单的理解为是对某次commit的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来识别里程碑的意义。

2、创建标签

(1)在git中打标签是非常简单的,首先,切换到需要打标签的分支上,再打标签。默认会打在最新提交的commit上

git tag v1.0   #给最新一次commit打上v1.0的标签

git tag   #查看所有标签

(2)打在指定的commit

git log  --pretty=oneline --abbrev-commit   t#历史记录

git tag v1.0 cbce3fo        #给commit id为cbce3fo打上标签

(3)标签不按时间顺序列出,而是按字母排

(4)git show [tagname]   #查看标签信息

(5)git还提供可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -a [tagname]  -m  "xxx"  commit_id 

3、操作标签

(1)在本地删标签:git tag -d v2.0

(2)在远程删标签:

        ①标签已经推送到远程了   git push origin [tagname]

        本地很多标签一次性推送: git push originame  --tags

        ②先本地删除 git tag -d v2.1

        ③再删远程的 git push origin:refs/tags/v1.0

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

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

相关文章

计算机毕业设计 服装生产管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

什么是安全漏洞?最全的漏洞分类!

01 — “ 什么是漏洞**”** 漏洞是指一个系统存在的弱点或缺陷&#xff0c;系统对特定威胁攻击或危险事件的敏感性&#xff0c;或进行攻击的威胁作用的可能性。漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误&#xff0c;也可能来自业务在交互处理过程中的设…

想要精益生产管理体系早落地,这些工作不能少!

精益生产管理体系是当代社会将企业管理的各种工具方法和理论、技术以及企业文化融为一体的产物。 推行精益生产管理体系时&#xff0c;企业一定要做好以下3个方面的工作&#xff1a; 1.改变观念&#xff0c;从管理层到员工层都必须深入的贯彻实施精益化生产的思想&#xff0c;…

【分享】“可恶”的运算放大器电容负载

他们说如果使用放大器驱动电容负载(图 1、CLOAD)&#xff0c;一个不错的经验是采用一个 50 或 100 欧的电阻器 (RISO) 将放大器与电容器隔开。这个附加电阻器可能会阻止运算放大器振荡。 图 1.支持电容负载的放大器可能需要在放大器输出与负载电容器之间连接一个电阻器。 使用…

Gitlab runner的使用示例(二):Maven + Docker 自动化构建与部署

Gitlab runner的使用示例&#xff08;二&#xff09;&#xff1a;Maven Docker 自动化构建与部署 在本篇文章中&#xff0c;我们将详细解析一个典型的 GitLab CI/CD 配置文件&#xff08;gitlab-ci.yml&#xff09;&#xff0c;该文件主要用于通过 Maven 构建 Java 应用&…

电脑明明切换到了中文输入法,却无法打字出汉字?

现象&#xff1a; 自己电脑桌面右下角的电脑输入法&#xff0c;已经是中文了 解决办法&#xff1a; 按一下键盘最左边的【Caps Lock】键&#xff0c; 电脑左上角会出现如下弹窗&#xff0c; 调整为&#xff1a;CAPS LOCK OFF 即可&#xff08;OFF时&#xff0c;才能打出汉字…

EW内网穿透详解!

EW EW又叫earthworm&#xff0c;是一套便捷式的网络穿透工具&#xff0c;具有socks5服务架构和端口转发两大核心功能&#xff0c;可以在复杂的网络环境下完成网络穿透。该工具能以"正向"&#xff0c;"反向"&#xff0c;"多级级联"等方式打通一条…

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项

67. 二进制求和 题目描述 67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 运行代码&#xff08;javaC) class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…

数据库基础知识---------------------------(3)

MYSQL的索引 用于快速找出在某个列中有一特定值的行&#xff0c;不使用索引&#xff0c;MySQL必须从第一条记录开始读完整个表&#xff0c;直到找出相关的行。按实现方式分为Hash索引和BTree索引 单列索引 普通索引 允许在定义索引的列中插入重复值和空值唯一索引 索引列的值必…

凸多边形(Convex Polygon)

凸多边形是边为直边且不向内折叠的特殊形状。连接凸多边形角的所有线都位于形状内部。凸多边形的角始终指向外部。所有边和角都相等的正多边形始终是凸多边形。 如果封闭形状具有曲面&#xff0c;则它不是凸多边形。在几何学中&#xff0c;多边形是具有直边和直角的平面二维形状…

Github 2024-09-20 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Kotlin项目1Python项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star…

二叉树(下)

目录 判断树是否相同 判断树是不是另一棵树的子树 二叉树翻转 判断平衡二叉树 二叉树层序遍历 这篇主要提供一些关于二叉树例题的讲解&#xff0c;如果对二叉树及其基本操作有疑问的可以转至&#xff1a; 二叉树&#xff08;上&#xff09;-CSDN博客二叉树&#xff08;中&…

imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现

0x01 漏洞描述&#xff1a; imo云办公室由上海易睦网络科技有限公司于2007年创立&#xff0c;总部位于上海&#xff0c;imo云办公室管理运营企业即时通讯平台imo&#xff0c;包括对imo的在线支持&#xff0c;故障处理&#xff0c;客户服务等&#xff0c;对imo进行持续研发&…

第五届“马栏山杯”国际音视频算法大赛创新应用赛投票环节正式启动啦!

本次大赛分为专业奖和大众人气奖。专业奖由评委直接选出。大众人气奖经组委会初筛后选出62组优秀作品&#xff0c;由网络投票选出40名获奖选手&#xff01; 快快戳链接&#x1f517;&#xff1a;https://h5.shuziwenbo.cn/challenge/vote?cxidedcrfv看看自己的作品有没有入选吧…

【AI视频】Runway Gen-2:图文生视频与运动模式详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;仅图片生成视频方法一&#xff1a;通过Midjourney生成图片方法二&#xff1a;通过Runway预览生成图片注意点 &#x1f4af;图加文生成视频方式一&#xff1a;Midjourney…

Web端云剪辑解决方案,BS架构私有化部署,安全可控

传统视频制作流程繁琐、耗时&#xff0c;且对专业设备和软件的高度依赖&#xff0c;常常让企业望而却步&#xff0c;美摄科技凭借其强大的技术实力和创新能力&#xff0c;推出了面向企业用户的Web端云剪辑解决方案&#xff0c;为企业提供一站式、高效、便捷的视频生产平台。 B…

计算机考研408-计算机网络

【题33】下列选项中&#xff0c;不属于网络体系结构所描述的内容是&#xff08;&#xff09; A.网络的层次 B.每一层使用的协议 C.协议的内部实现细节 D.每一层必须完成的功能 解析&#xff1a; 本题考查的是网络体系结构相关的概念。 图1描述了网络的7层架构以及每一层所要完成…

无人机 PX4 飞控 | EKF 使用传感器汇总与添加传感器方法

无人机 PX4 飞控 | EKF 使用传感器汇总与添加传感器方法 前言飞控自带基本传感器IMU磁力计气压计静态气压位置误差校正气压计偏压补偿 高度传感器测距仪使能测距仪融合有条件 可额外配置的传感器光流外部视觉系统 新传感器确定传感器类型和接口更新硬件定义添加驱动更新EKF 前言…

MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务&#xff1f; 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务&#xff0c;执行修改后回滚 5.3 开始一个事务&#xff0c;执行修…

观后感:《中国数据库前世今生》——时代变迁中的数据库崛起

最近观看了《中国数据库前世今生》纪录片&#xff0c;这部影片详细梳理了从1980年代至今&#xff0c;中国数据库技术发展的跌宕历程。作为一名程序员&#xff0c;这部纪录片让我不禁感慨数据库技术的飞速进步&#xff0c;也让我更深入地理解了数据库技术在我们日常生活中的重要…