一 Git简介
Git的由来
是一个开源的分布式版本控制系统 ,用于有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。
GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。
Git的优点
- 设计简单,完全免费,并且开源;
- 占用空间小,性能强悍,软件运行速度快;
- 分布式架构,多人可并行进行开发;
- 使用简单,易于学习,使用群体庞大;
- 具备高效管理超大规模的项目能力;
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博客