Qt6教程之三(19) Git版本管理工具

一 Git简介

Git的由来

是一个开源的分布式版本控制系统 ,用于有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。

GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。

Git的优点

  1. 设计简单,完全免费,并且开源;
  2. 占用空间小,性能强悍,软件运行速度快;
  3. 分布式架构,多人可并行进行开发;
  4. 使用简单,易于学习,使用群体庞大;
  5. 具备高效管理超大规模的项目能力; 

Git的设计原理

git整体分为三个部分:工作区、暂存区和本地库。

工作区间: 即我们创建的工程文件, 在编辑器可直观显示

缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站

本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处。

如果有远程仓库,其流程如下:

关于团队协作开发,流程如下:

 

跨公司或跨团队协作开发,流程如下:

 

Git常用命令

git init // 初始化 在工作路径上创建主分支

git clone 地址 // 克隆远程仓库

git clone -b 分支名 地址 // 克隆分支的代码到本地

git status // 查看状态

git add 文件名 // 将某个文件存入暂存区

git add b c //把b和c存入暂存区

git add . // 将所有文件提交到暂存区

git add -p 文件名 // 一个文件分多次提交

git stash -u -k // 提交部分文件内容 到仓库

git stash pop 把之前放入堆栈的c拿出来 继续下一波操作

git commit -m "提交的备注信息"  // 提交到仓库

git commit -am "备注信息" // 将内容放至仓库 也可用git commit -a -m "备注信息"

git branch 分支名 // 新建分支

git branch // 查看当前所有分支

git checkout 分支名 // 检出分支

git checkout -b 分支名 // 创建并切换分支

git checkout commitId 文件名  // 还原这个文件到对应的commitId的版本

git branch -v // 查看分支以及提交hash值和commit信息

git merge 分支名 // 把该分支的内容合并到现有分支上

git branch -d 分支名 // 删除分支

git branch -D 分支名 // 强制删除 若没有其他分支合并就删除 d会提示 D不会

git branch -m 旧分支名 新分支名 // 修改分支名

git branch -M 旧分支名 新分支名 // 修改分支名 M强制修改

git branch -r // 列出远程分支(远程所有分支名)

git branch -a // 查看远程分支(列出远程分支以及本地分支名)

git fetch // 更新remote索引

git push -u origin 分支名 // 将本地分支推送到origin主机,

关于Git的常用命令,这里推荐一篇博客,链接如下:

https://blog.csdn.net/WEB_CSDN_SHARE/article/details/79243308?ops_request_misc=&request_id=&biz_id=102&utm_term=Git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-79243308.142^v80^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

二 Git下载安装

Windows系统下载地址:https://gitforwindows.org/

下载完后,双击安装包开始安装,博主这里下载的最新版本的2.40 ,

开始安装,一路下一步,注意选择安装路径,

 

组件全选,

 

接下来的所有过程,全部保持默认,一直下一步,直至安装完成,最后自动启动git ,

如下:

 

如果有兴趣想了解安装过程中的每一项是什么含义,这里推荐一篇博客,

指令大全

 

三 使用命令操作Git

首先打开终端工具Git Bash,

 

配置仓库,配置完成后,本机默认使用该配置。

git config --global user.name "wsb"   //配置名称

git config --global user.email "1234@qq.com" //配置邮箱

创建版本库

首先在本地新建一个空白文件夹 depositorys,然后进入该文件夹,使用鼠标右键的方式启用Git Bash,

 

启动之后输入pwd查看当前目录,

 

输入git init命令把当前目录变成git可以管理的仓库可见系统默认创建了main分支,同时depositorys目录下会多一个.git的隐藏文件,

 

 

创建一个文本文件,并在文本文件里面写一些内容,

 把test.txt文件提交到git中,

再次修改test.txt文件,然后执行add与commit,如下:

 

一次commit可以提交多个文件,并且一次commit就会生成一个快照,

查看历史使用 git log

版本回退 git reset --hard HEAD^  ,这里是回退到上一个版本,在上上一个版本是HEAD^^ ,也可以直接用数字HEAD~2 ,当然若有10版本则写作HEAD~10 。

版本回退后,使用git log查看,发现版本已回退到上一个版本。

回退到指定版本

首先查询所有版本号: git reflog,然后在回退到需要回退的版本: git reset --hard 版本号,

 

查看当前状态: git status,

 

新增一个文件newFile.txt,并添加到工作区,然后查看状态,显示为unstage,

 

 提交文件newFile.txt,并再次查看状态,此时发现工作区是空的,没有待提交项。

 

修改test.txt文件内容,接着查看其内容变更,

 

 

 添加文件,接着再次修改,再次添加,最后提交。

 

此时在把test.txt的内容新增一行,如下:

 

不执行add,直接执行commit,

查看状态发现我们有一次修改位提交,

 

所以,在修改文件后,一定要遵循先add在commit的顺序,并且只要是文件做了一次修改,那么就必须执行一次add, 否则执行了commit后,git只会提交已经被add后的文件,最后的结果就是出现上面的未提交提示。

所以,我们需要在执行一次add和commit后,在查看状态就不存在未提交的提示啦。

查看工作区内容与版本库最新版本的区别:git diff HEAD -- test.txt

 

撤销修改

 

删除工作区文件

 

 

恢复文件

 

创建分支: 首先创建分支dev,然后切换至分支dev

 

也可以使用创建并切换分支指令,git checkout -b dev2 ,可以看到执行该命令后,分支已经切换至dev2,

 

查看分支git branch,当前使用的分支前面有一个✳号,可见目前的分支是dev2

 

新建一个文本文件dev2,txt, 然后在dev2分支上面提交,

 

切换到主分支main,然后把dev2的内容合并到主分支

 

把dev2的内容合并到主分支

 

删除dev2分支,接着查看剩余分支,发现dev2分支成功删除。

 

解决冲突: 当其他的分支和主分支对同一个文件同一个位置进行修改,当执行分支合并后会产生冲突,此时需要根据实际情况进行修改后,没有冲突才能提交。

在主分支上面修改dev2.txt第一行内容为 hello world 1234567890;

执行add和commit, 

切换至dev分支,

 

修改dev2.txt第一行内容为 hello world 123;

然后在dev分支上面add和commit,

接着切回主分支main

 

合并dev分支到main,提示合并失败

 

此时,使用git status查看冲突的文件,可发现冲突的文件叫dev2.txt

 

我们使用cat dev2.txt 查看一下该文件的内容,看看冲突在哪里?

 

经查看后发现,冲突在于不同的分支修改了同一行的内容,解决办法一般有两个:

一是以main或dev分支为准的修改,然后删除另外一个分支的修改,各自提交和在合并;

二是合并两个分支的修改后在分别提交,最后在合并;

这里演示一下第二种方式,

先修改内容如下,

在add和commit,最后合并成功,

 

接着删除dev分支,

 

查看分支合并情况,

用git log --graph --pretty=oneline --abbrev-commit可以看到分支的合并情况,包括分支合并图(--graph)、一行显示(--pretty=oneline)、提交校验码缩略(--abbrev-commit)显示:

我们先修改一下dev2.txt的内容,然后执行add,此时若有其他任务,则需要

保存工作现场 git stash,便于去做其他任务,

查看stash,

 

恢复工作现场

 

接着把文件提交,之后把stash删除, 

 

查看远程库详细信息,

 

将本地分支推送到远程分支origin

 

抓取分支

 

把本地位push的分叉提交历史整理为直线,

 

创建一个hello 标签

 

查看标签

 

删除标签

 

推送所有未推送的标签到远程库,

 

推送指定标签,如hello标签

 

如果标签已经推送到远程,要先从本地删除,再从远程删除

 

四 在集成环境Qt Creator中使用Git

本地仓库使用介绍

首先新建一个项目,叫test_git ,然后在Qt Creator中配置git,

 

点击确定后,在工具栏菜单选择git-->创建仓库,

 

仓库路径选择当前项目文件夹,点击确定。

 

之后,我们就可以把当前项目文件提交到仓库中了,

 

 

点击提交后,我们来写几行代码,

 

和已提交的代码对比一下不同:

 

蓝色部分就是不同的部分啦,是不是非常的方便和炫酷呢,

 

再次提交,

 

 

使用起来非常方便,再也不用敲命令啦。

远程仓库介绍

博主这里使用的是GitCode,  官方地址是 https://gitcode.net/dashboard/projects/home,

要使用远程仓库,首先需要使用git生成密钥,如下:

打开git控制台,输入 ssh-keygen -t rsa -C"你自己的邮箱" 来生成公钥,

公钥文件路径为: C:\Users\用户名\.ssh\id_rsa.pub

打开公钥文件,复制其内容到对应的远程仓库密钥位置粘贴即可。

配置完成后,在云端新建一个项目,

 

填入相应信息后,点击新建项目, 

完成项目新建后,点击克隆,点击 通过SSH Clone项目下的复制链接,

 

这个链接就是我们的远程仓库地址,接着在Qt开发环境中配置仓库地址,

 

点击添加,名称可以顺便设置,URL处粘贴刚才复制的仓库地址,最后点击确认。

 

之后点击关闭,至此云端仓库地址配置完成。

如果我们要把本地代码文件全部传到云端的话,需要现在本地建立仓库,而且在提交到云端之前,本地必须是全部提交的,也就是说本地未提交部分不会传到云端的。

创建仓库:

执行提交:

 

Push到云端:

 

 

 此时,刷新云端仓库,即可看到所有文件啦!

接下来,我们增加一些代码,然后现在本地提交后,在push到云端,最后在云端查看代码:

 

本地提交:

 

 

Push到云端:

 

 

云端查看代码:

 

至此,在Qt Creator中演示使用git提交代码到云端仓库便结束了,大家多多练习吧。

完整代码克隆地址:

git@gitcode.net:XiaoWang_csdn/test_git.git

下一篇博客:

Qt6教程之三(20) 软件发布流程_折腾猿王申兵的博客-CSDN博客

上一篇博客:

Qt6教程之三(18) 使用SVN进行版本管理_折腾猿王申兵的博客-CSDN博客

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

Android中如何使用GPS

Android中如何使用GPS获取位置信息?一个小Demo如下 GPS简介 Gobal Positioning System,全球定位系统,是美国在20世纪70年代研制的一种以人造地球卫星为基础的高精度无线电导航的定位系统,它在全球任何地方以及近地空间都能够提供…

【万字长文】深度解析 Transformer 和注意力机制(含完整代码实现)

深度解析 Transformer 和注意力机制 在《图解NLP模型发展:从RNN到Transformer》一文中,我介绍了 NLP 模型的发展演化历程,并用直观图解的方式为大家展现了各技术的架构和不足。有读者反馈图解方式虽然直观,但深度不足。考虑到 Tra…

全球首位 AI 律师出庭,花 100 万美元找“传话筒”!网友:头脑正常的人谁会同意?...

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 在 ChatGPT 的热潮下,近来在国内外科技网站上,各类 AI 话题几乎成为了“热搜常驻户”,其中不乏一些看起来极具噱头的新闻: 本周,AI 公司 Do…

Edge浏览器的美化

用了扩展软件后的Edged的界面为 非常方便 ,同时它还可以添加一些你需要用用到的app,无需下载。 它侧栏还有程序员选择,我们在这里可以直接进入CSDN。 废话不多说直接上教程: 1.打开Edge找到扩展选项,点击管理扩展。 …

这才是我想要是游览器——打造最强Microsoft edge+ChatGPT

这也许是你的Microsoft edge界面: 而这时我的edge游览器界面: 对比一下,第一个是默认的游览器界面,第二个是升级后的游览器界面。 是不是感觉第一个比较土呢第二个更高大上一些呢 其实相差巨大的主页,其实只是一个插…

TR外汇黑平台资金盘深度揭秘,谨防上当受骗,迟早会跑路

本人是有着13年外汇经验的外汇人,行业的大小事情,各级的产业链也基本都接触过,算是一个很资深的行业人士了,这么多年可以说是从刀光剑影中走过来,想想也很不容易了。本人vx:yunshao886 本篇所讲内容&#…

玩转 ChatGPT,看这条就够了,Prompt 最全中文合集

Prompt 最全中文合集 玩转 ChatGPT,看这条就够了! 🚀 简化流程:ChatGPT Shortcut 提供了快捷指令表,可以快速筛选和搜索适用于不同场景的提示词,帮助用户简化使用流程。 💻 提高生产力&#…

美国探亲签证面签时一定要用英语吗?

签证问题:美国探亲签证面签时一定要用英语吗? 知识人网:申请美国探亲签证,面签时不会说英语也没有关系的。面签时不一定要说英语,您可以用中文面谈。美国签证官都精通英语和中文,您在面签时可以选择用中文…

中外互免签证协定一览表(普通护照与公务普通护照)

普通护照:由公安部出入境管理机构或者公安部委托的县级以上地方人民政府公安机关出入境管理机构以及中华人民共和国驻外使馆、领馆和外交部委托的其他驻外机构签发,主要颁发给出国定居、探亲、访友、继承财产、留学、就业、旅游等因私事出国的中国公民。…

我与 InsCODE AI 创作助手的一次对话

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 我与INDCODE AI 创作助手的一次对话 🧊摘要🧊前言🧊对话内容🧊结束语 🧊摘要 本文介绍了 CSDN 嵌入式INSCODE AI 创作助手…

我与 INDCODE AI 创作助手的一次对话

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 我与INDCODE AI 创作助手的一次对话 🧊摘要🧊前言🧊对话内容🧊结束语 🧊摘要 本文介绍了 CSDN 嵌入式INSCODE AI 创作助手…

聊聊微服务架构中的用户认证方案!

更多内容关注微信公众号:fullstack888 聊聊微服务中一个重要的话题:如何设计微服务架构下的用户认证方案。今天主要涉及三个方面的内容: 传统的用户认证方案;JWT 与 JJWT;基于网关的统一用户认证。 一、传统的用户认证…

chatgpt赋能python:用Python来炒股——更高效、更智能的投资方式

用Python来炒股——更高效、更智能的投资方式 随着科技的发展,越来越多的投资者开始采用自动化投资方式来管理并优化自己的投资组合,Python作为一种高效、可扩展性强的编程语言,逐渐成为了自动化投资的重要工具。本文将介绍如何利用Python来…

chatgpt赋能python:有人用Python炒股吗?探究Python在炒股领域的应用

有人用Python炒股吗?探究Python在炒股领域的应用 Python作为一种高级编程语言,已经被广泛应用于各个领域,包括自然语言处理、数据分析、人工智能等等。那么在炒股领域,Python是否同样有广泛的应用呢?本文将探究Python…

chatgpt赋能python:Python炒股代码:如何实现自动交易?

Python炒股代码:如何实现自动交易? 股票交易从来都不是一件容易的事情。因此,很多股民也会选择依靠程序化交易,也就是自动交易的方式。而Python正是一种极为适合进行自动交易的编程语言。通过Python编写的程序,不仅可…

html修改修改头像业务,修改头像.html

修改头像 $axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; }; $axure.utils.getOtherPath function() { return resources/Other.html; }; $axure.utils.getReloadPath function() { return resources/reload.html;…

用户上传头像以及BUG修改

持久层 1、sql语句的规划 上传文件的操作其实是:先将用户上传的文件保存到服务器端的某个位置,然后将保存文件的路径记录在数据库中。当后续需要使用该文件时,从数据库中读出文件的路径,即可实现在线访问该文件。 在持久层处理数…

HTML点击头像修改页面,头像修改页.html

头像修改页 $axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; }; $axure.utils.getOtherPath function() { return resources/Other.html; }; $axure.utils.getReloadPath function() { return resources/reload.htm…

移动端--修改头像

image/*表示选择所有图片格式 使用第三方插件实现头像裁剪 Cropper.jsCropper.js const cropper new Cropper(image, { viewMode: 1, dragMode: move, aspectRatio: 1, autoCropArea: 1, cropBoxMovable: false, cropBoxResizable: false, background: false, movable: true…

奥特曼格斗进化3全人物存档

奥特曼格斗进化3是奥特曼格斗进化系列的第三部作品,随着游戏的一路走来,游戏的可选角色越来越丰富,画面、技能效果、音效等方面也有了长足的进步,但由于角色解锁起来比较复杂,因此小编为大家带来了奥特曼格斗进化3全人…