Qt-Git

1. 版本管理

1.1 人工版本管理

人工管理: 费时费力。

1.2 git 概述

git是一款版本管理软件, 可以在任何时间点保存文件,也能够恢复到以前任何时间点保存的文档

main.cpp 在不同的时间点进行了保存,那么就能恢复到任意一个时间点保存的文件

2. git安装

下载地址: https://git-scm.com/downloadshttps://git-scm.com/downloads

下载文件:

安装过程是傻瓜安装,全部next即可。

但是如果要调整安装路径,必须不能包含中文。

安装完成后右键菜单会多出两个选项:

点击 Git Bash Here 可以打开git命令行工具。

学习git 就是学习git命令

3. git 基本操作

3.1 配置 git 用户信息

  • 配置提交人姓名: git config --global user.name 姓名

  • 配置提交人邮箱: git config --global user.email 邮箱地址

  • 查看git信息: git config --list

  • git配置文件路径: C:\Users\Administrator\.gitconfig

3.2 git工作流程

  • 工作目录: 自己的项目目录

  • 暂存区: 存放临时修改的文件

  • git仓库: 用来保存编写好的项目文件,任何一个文件都能在任何时间点进行保存

工作流:

  1. 在项目目录下创建项目文件

  2. 将项目文件提交到暂存区

    注意: 存放在暂存区的文件只有一份,后提交的会覆盖之前提交的文件

  3. 暂存区文件才能再提交到 Git 仓库

    注意:git 仓库中,同一个文件会有多份,都有自己的id号(版本号)

3.3 git基本操作命令

  1. git init -初始化git仓库

  2. git status -查看文件状态

  3. git add 文件名 -添加文件到暂存区,该文件被git管理起来

  4. git commit -m 提交信息 -向仓库中提交代码,需要添加提交日志信息

  5. git log -查看提交记录

1.创建项目,并创建 git仓库

2.仓库状态

  • On branch master --- 分支相关信息,暂不用看

  • No commits yet --- 尚没有文件提交到仓库

  • Untracked files --- 未追踪文件,即还没有被 git 仓库管理的文件

    • 重点:红色代表该文件还没有被 git 管理

3.将main.cpp 添加到暂存区

new file: 代表该文件已增加到暂存区

4.将main.cpp 文件提交到 git 仓库

5.查看日志

3.4 git忽略清单

在实际开发中,有些 文件/文件夹 是不需要被 git 管理的

实际开发时,在项目根目录下创建一个 .git ignore 文件,在文件中写入不希望git管理的文件或者文件夹名称即可

查看状态,此时已经看不到 myapp.pro.user 文件了

3.5 一次性提交多个文件

git add . : . 代表任意文件

3.6 修改文件后再次提交

1.修改 widget.cpp 文件

2.查看文件状态

modified: 说明哪些文件发生了改变,并且在修改之后并没有提交到git

3.再次提交

4. 文件恢复

4.1 暂存区-->项目目录

目标: 使用暂存区中的文件,覆盖当前项目目录中的文件

应用场景: 在时间点A向暂存区进行了一次提交, 之后继续编写代码,在时间点B发现代码有错,需要恢复成时间点A的代码

cpp 复制代码
git  checkout  文件名

示例:

  1. 修改 widget.cpp 文件中的代码

重点:代码修改完成后并未再次添加到暂存区

  1. 查看文件状态

3.从暂存区恢复

  1. 回到Qt编辑器会提示文件被修改过

选择 "Yes to All" 时,恢复成原来的状态(暂存区的版本)

4.2 删除暂存区文件

git rm --cached 文件名

示例1: git rm --cached widget.cpp 从暂存区删除 widget.cpp 文件

示例2: git rm --cached -r . 从暂存区删除所有文件

4.3 git仓库 --> 项目目录(版本穿越)

git log 查看已有版本

git reset --hard commitID

该命令能够从仓库恢复文件,从仓库恢复的文件会同时覆盖暂存区和项目目录的文件。同时,git log命令只能查看到恢复到的版本号。之后的版本号无法看到。

1.使用 git log 查看之前提交的版本

2.要穿越到哪个版本就复制哪个版本号

3.再次查看日志

只能看到第一次提交的版本号

4.4 精简版信息查看

git reflog 查看精简版

查看精简版,能够看到所有的操作

该命令读取的是 .git/logs/HEAD 文件

如果要穿越回其他的任意版本号,都可以从该文件中找到

5. 分支

5.1 分支概述

分支概念: 为项目创建多个副本,每个副本完成一个独立的工作。 分支能够做到多件事情同时进行,且互不影响

  • 主分支(master)

    • 主分支是系统默认使用的分支,之前示例中的代码提交全部都是在主分支中完成的

    • 主分支上最终会保存整个项目的完整代码,项目开发完成后要上线运行,也是运行的主分支上得完整代码

  • 开发分支(develop)

    • 开发分支是为了完成某个功能模块的开发而单独建立的副本。例如:开发用户管理模块(users.cpp)页面时,就能创建 users 分支。

    • 开发分支是基于主分支创建的,当然一个开发分支下还能再创建另一个开发分支,形成 父-子-孙-... 结构

    • 开发分支上工作完成后,一定会合并回主分支

主分支: 系统默认是在主分支(master)上的

开发分支

小结

  • 主分支是Git自动帮我们创建的 master,这条分支上的代码一般用于都是线上的项目

  • 开发分支,在主分支上进行创建,一般用于我们开发的时候使用,也需要尽量保证其稳定性

5.2 分支命令

  • 查看分支: git branch

  • 创建分支: git branch 分支名

    • 在哪条分支上输入的命令,就是在哪条分支上进行的创建

    • git branch users 创建了一个叫做 users 的分支

  • 切换分支: git checkout 分支名

    • git checkout users 切换到 users 分支上

    • 在 users 分支上只能看到 主分支 和 当前分支(users)上的文件

  • 注意:当切换分支的时候,需要把暂存区里面的文件进行提交,不然会暂存区里面的文件会跟着到切换的这条分支上

    • 当切换回主分支的时候,就看不到其他分支里面的文件了
  • 注意: 切换分支时,必须保证当前分支的文件全部提交到仓库。

创建和使用分支案例,步骤如下 :

  1. 创建项目,并在创建时选择 git 作为版本管理工具

  2. 新建一个 MyButton 自定义控件,将项目提交到暂存区,再提交到仓库

  3. 查看分支,创建 users 分支,切换到 users 分支

  4. 创建 Users模块,并将Users模块提交到users分支上

  5. 切换 master/users 分支, 查看编辑器中文件显示的情况

1.创建项目,并在创建时选择 git 作为版本管理工具

使用git时会自动生成一个master分支,也叫主分支。项目默认创建在master分支上

  1. 新建一个 MyButton 自定义控件,将项目提交到暂存区,再提交到仓库

注意: 创建的自定义空间也要交给 git 管理

通过 Qt Creator 创建的项目和文件已经添加到 暂存区

将文件提交到暂存区,再提交到git仓库

3.查看分支,创建 users 分支,切换到 users分支

  1. 创建 Users模块,并将Users模块提交到users分支上

查看git 状态

将 Users 模块提交到users分支

  1. 切换 master/users 分支, 查看编辑器中文件显示的情况

① 查看编辑器中的状态

② 切换回主分支

③ 回到编辑器中

编辑器中提示保存文件,一定要选择 关闭项。

④ 切换至 users 分支,观察编辑器

  1. 同理,创建 goods分支、Goods 模块

5.3 合并分支

  • 合并分支: git merge 分支名

    • git merge users 合并 users 分支

    • 注意: 合并分支时,要在 master 分支上

5.4 删除分支

  • 删除分支: git branch -d 分支名

  • 分支如果没有被合并则不允许删除

  • 如果要强制删除使用 -D 参数

强制删除 goods 分支

5.5 临时存储分支

当在某一分支上进行开发时,如果该分支上的文件没有提交到 git 仓库,则不允许进行分支切换。

当你在一个分支工作时,临时出现了一个更紧急的任务需要马上完成。而此时,当前分支的工作并没有完成,也不希望提交,这时就可以进行临时存储。

  • 将当前所有的改动临时存储: git stash

  • 将临时存储进行恢复: git stash pop

注意:

  • 在其他的分支中也能执行恢复改动,但是会把这些文件恢复到当前命令的分支,所以我们在恢复的时候需要注意,我们当时在哪个分支进行的开发

示例:

  1. 创建 test分支,创建 Test 模块,将 Test模块添加到 test分支
  1. 对 test.cpp 进行修改

3.因为 test.cpp 被修改了,如果在未提交到仓库前就进行分支切换,会报错

4.此时如果要切换分支,则需要将修改保存到临时存储分支

5.切换分支

6.切换回test分支,并恢复

6. 远程仓库

6.1 远程仓库(github/gitee)

  • 企业开发项目时,通常都是若干人组成一个项目组进行开发。

  • git 只能在本地电脑上创建仓库,管理个人编写的项目代码,而实际开发时需要团队协作,这时就需要一个共用的仓库,这个仓库会单独放在一台服务器上,在这台服务器上搭建的仓库就是远程仓库。

  • 远程仓库可以是公司内部自行搭建的,也可以使用互联网上的远程仓库。github 和 gitee 是最常用的互联网远程仓库。

  • github是国外的网站,所以速度相对慢一些;gitee(码云),是国内的网站,速度快一些。

6.2 注册 gitee 账号

6.3 多人协作流程

  1. 项目经理(PM)在本地创建项目主体架构,并提交到本地git仓库;再将项目推送(push)到远程仓库(github、gitee)上

  2. 邀请程序员 A、B、C 加入项目组

  3. 程序员 A、B、C 可以远程克隆(clone)项目,然后按照之前分配好的任务完成自己的功能

  4. 程序员完成功能后,将自己写的代码再推送(push)到远程仓库中

  5. 项目经理从远程仓库中拉取(pull)所有完成好的项目代码

6.4 PM创建本地仓库

目标:PM创建本地仓库,并将代码提交到本地仓库

步骤:

  1. PM创建本地仓库

  2. PM将项目代码添加到暂存区

  3. PM将项目代码提交到本地仓库

  4. PM创建远程仓库 (github)

cpp 复制代码
# 初始化仓库
git init  

# 将项目代码添加到暂存区, 
git add .

# 将项目代码提交到本地仓库
git commit -m PM创建项目仓库提交原型

6.5 PM创建远程仓库

1.创建远程仓库

2.填写仓库信息

3.仓库创建成功

6.6 PM将项目文件推送到github

cpp 复制代码
# 将本地仓库中的最新版本推送到远程仓库
git push https://gitee.com/hhb1218/pm.git master

向远程仓库推送数据时,需要填写用户名和密码

提交成功提示

重载远程仓库页面

6.7 windows凭据

windows凭据中记录了github的账号和密码,所以再向github中推送数据时,不需要再添加账号和密码

6.8 简化推送命令

为远程仓库地址设置别名:git remote add 别名 远程仓库地址

示例:

cpp 复制代码
# 为远程仓库设置一个简单的别名
git remote add origin https://gitee.com/hhb1218/pm.git

# 使用别名进行推送
git push origin master

# -u 能够保存提交地址和分支下一次直接使用
git push -u origin master

# 使用过 -u 参数后,再次提交,直接使用 git push 即可
git push

6.9 组员clone项目

clone 不需要权限

cpp 复制代码
git clone https://gitee.com/hhb1218/pm.git

6.10 组员修改程序后提交回远程仓库

PM必须将codeA、codeB、codeC邀请为组员,否则codeA、codeB、codeC没有权限向远程仓库提交数据。

PM 邀请 codeA、B、C 成为开发者:

复制邀请链接并发送给 codeA、B、C

codeA、B、C 接收邀请:

codeA、B、C 登录 gitee后,将PM发送的邀请链接地址复制到浏览器地址栏中

codeA、B、C 接受邀请

6.11 PM拉取最新版本

cpp 复制代码
git pull origin master
  • git clone 是在第一次加入项目时使用,从远程仓库下载完整的项目代码

  • git pull 是在已有代码基础上执行的,只拉取新增或者修改的文件

6.12 冲突解决

解决办法: coderB 将冲突文件修改后再向 github 进行提交

coderB 要先拉取(git pull) 远程仓库的代码; 手动修改文件解决冲突;再 commit 到本地仓库,再git push 到远程仓库

报错信息:

拉取时提示的冲突信息:

7. ssh免密登陆

  • ssh: 不需要输入用户名和密码也能登录

  • ssh 通过验证公钥和私钥的配对情况决定是否登录

  • 公钥和私钥需要开发者使用命令生成

  • 公钥:保存在远程仓库

  • 私钥:保存在开发者电脑

步骤:

  1. 生成秘钥: ssh-keygen

  2. 将公钥复制到 github 中

第一步:生成公钥和私钥:

第二步: 找到公钥并复制公钥字符串:

使用编辑器打开公钥文件,复制文件内容 :

第三步:在gitee仓库中找到 ssh :

第四步: 将公钥添加到网站中 :

使用 ssh 提交文件:

cpp 复制代码
# 为远程仓库地址起一个别名
git remote add alishow_ssh git@github.com:hhb1218/alishow.git

# 使用 git push 提交文件
git push -u alishow_ssh master

git push

8. readme.md

相关推荐
yylの博客3 小时前
Windows通过git-bash安装zsh
windows·git·bash·zsh
丁总学Java3 小时前
(Z Shell)zsh: no matches found: ? 使用单引号包裹
git·zsh
萌狼蓝天4 小时前
【NAS】绿联NAS+极狐Gitlab+1Panel
git
deja vu水中芭蕾9 小时前
git push origin HEAD:refs/for/分支名
git
海岛日记13 小时前
git常用操作
git
喝鸡汤13 小时前
一起学Git【番外篇:如何在Git中新建文件】
git
“αβ”13 小时前
Windows下使用git配置gitee远程仓库
git
谢家小布柔18 小时前
Git图形界面以及idea中集合Git使用
java·git
winner888119 小时前
git merge 冲突 解决 show case
java·git·git merge·git冲突
玩电脑的辣条哥1 天前
怎么给git动图扣除背景?
git·抠图