【Git的详细介绍】

1 (Ubuntu)安装Git

cpp 复制代码
// Ubuntu下面安装
sudo apt-git install git -y

// 查看git的版本
git --version

2 创建本地仓库

cpp 复制代码
// git初始化
git init

3 配置Git

cpp 复制代码
// 配置全局名称和email
git config --global user.name "huangyuqian"
git config --global user.email "2607584693@qq.com"
// 查看当前配置
git config -l

4 基本操作(认识工作区、暂存区、版本库)

  创建的文件先是在工作区,然后add到暂存区,最后commit到版本库

cpp 复制代码
// 查看提交日志
git log

// 打印一行漂亮的日志
git log --pretty=oneline

5 修改文件

cpp 复制代码
// 查看状态
git status

// 查看修改了哪些内容
git diff ReadMe

6 版本回退

**  Git 能够管理文件的历史版本,这也是版本控制器重要的能⼒。**

cpp 复制代码
// 执⾏ git reset 命令⽤于回退版本
git reset [--soft | --mixed | --hard] [HEAD]
cpp 复制代码
// 查看历史提交记录的commit ID
git reflog

7 撤销修改

**  如果我们在工作区写了很长时间代码,越写越写不下去,觉得自己写的实在是垃圾,想恢复到上⼀个版本。**

7.1 对于工作区的代码,还没有add操作

cpp 复制代码
// 将工作区文件回退到最近一次add操作
git checkout -- ReadMe

7.2 已经add了,但是还没有commit

cpp 复制代码
// 将暂存区的内容,回退到当前版本库(前两个版本库就是HEAD^^)
git reset HEAD ReadMe

// 再将工作区的文件,回退到最近的一次add操作
git checkout -- ReadMe

7.3 已经add了,并且commit

cpp 复制代码
// 全部回退到上一个版本库,前提是没有push到远端仓库
git reset --hard HEAD^

8 删除文件

**  在 Git 中,删除操作也是⼀个修改操作**

cpp 复制代码
// 三步操作
rm file5
git add file5
git commit -m "delete file5"
cpp 复制代码
// 两步
git rm file4
git commit -m "delete file4"

9 分支管理

**  分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习 C++ 的时候,另⼀个你正在另⼀个平行宇宙里努力学习 JAVA。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了 C++ 又学会了 JAVA!**

9.1 创建分支

cpp 复制代码
git branch        // 查看当前版本的所有分支
git branch dev    // 新建分支dev
git checkout dev  // 切换到指定分支dev

// 如果要和dev分支合并,就要先进入master,再merge
git checkout master
git merge dev

**  如果要合并两个分支,就要先进入master分支,git merge dev**

9.2 删除分支

  合并完成后, dev 分⽀对于我们来说就没⽤了, 那么dev分⽀就可以被删除掉。注意如果当前正处于某分⽀下,就不能删除当前分⽀。

9.3 分支管理--合并分支

cpp 复制代码
git branch dev1      // 创建分支
git checkout dev1    // 切换到指定分支

// 上面两步可以合并为一步
git checkout -b dev1   // 创建并切换到指定分支

此时,合并失败,ReadMe文件里面存在一些代码:

至于保留哪些内容,则需要手动修改!!!

修改后还需要add,commit操作

9.3 分支管理--分支策略

  在实际开发中,master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活;

  ⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;

9.4 分支管理--bug分支

  假如我们现在正在 dev2 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有 bug,需要解决。在Git中,每个bug 都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。再回到dev2分支上继续开发。

  Git 提供了 git stash 命令,可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来。

  现在dev2里面的内容存储起来了,然后再新建一个分支来修复master里面的bug。(不要直接在master分支里面修改)

  此时,master里面的bug修复成功了,然git stash pop,恢复原来在dev2上面开发的代码

  再去dev2分支,继续开发代码

**  开发完成后,再与maser分支合并(避免再master分支上出现bug)。注意这里是dev2与master合并,不是maser与dev2合并。**

  master合并完成后,再把多余的分支删除。

9.5 分支管理--强制删除分支

cpp 复制代码
// 强制删除分支
git branch -D dev3

9.6 分支管理--小结

  在团队开发中,Git 分支主要用于隔离开发任务,避免不同功能之间相互影响。

  例如,当需要开发一个新功能时,如果直接在主分支(main/master)上修改代码,而功能尚未完成,此时提交代码可能会导致项目无法正常运行,影响其他成员继续开发;但如果一直不提交,又存在代码丢失的风险。

  因此,可以先创建一个新的功能分支(feature branch),在自己的分支上独立开发。开发过程中可以随时提交代码,保存开发进度,而不会影响主分支和其他成员的工作。待功能开发、测试完成后,再将该分支合并回主分支即可。

  Git 分支具有以下优点:

  1. 互不影响:不同成员可以在各自的分支上独立开发。
  2. 安全可靠:可以频繁提交代码,避免开发进度丢失。
  3. 便于协作:功能开发完成后再统一合并,减少代码冲突。
  4. 操作高效:Git 创建、切换和删除分支几乎是瞬间完成,即使项目规模很大,操作速度也非常快。

正因如此,Git 分支已经成为团队协同开发中最重要、最常用的功能之一,也是现代软件开发的标准工作方式。

10 远程操作

10.1 理解分布式版本控制系统

  ⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!与传统集中式版本控制系统不同,每位开发者的电脑中都保存着一份完整的代码仓库和历史版本记录。

  这意味着开发者在日常工作中无需依赖网络,即使处于离线状态,也可以完成代码提交、查看历史版本、创建分支等操作,因为所有数据都保存在本地仓库中。

分布式版本控制系统具有以下特点:

  • 本地完整存储:每台电脑都拥有完整的版本库。
  • 支持离线工作:无需联网即可进行绝大多数 Git 操作。
  • 协作方便:开发者之间可以相互交换代码修改内容。
  • 安全性更高:即使某台电脑损坏,也可以从其他成员的仓库中恢复完整数据。

例如,开发人员 A 和开发人员 B 分别在自己的电脑上修改同一个项目,完成后只需同步彼此的修改内容,即可实现团队协作开发。

10.2 远程仓库的作用

  理论上来说,Git 仓库之间可以直接相互同步,但在实际开发过程中,这种方式并不方便。例如开发人员可能不在同一网络环境中,或者某位成员的电脑未开机,导致无法及时交换代码。

  因此,团队通常会引入一个公共的远程仓库(Remote Repository)作为代码交换中心。所有开发者从远程仓库克隆项目到本地,在本地完成开发后再将代码推送(Push)到远程仓库,同时也可以从远程仓库拉取(Pull)其他成员提交的代码。

远程仓库的主要作用包括:

  1. 团队协作中心:统一管理和同步团队代码。
  2. 代码备份:防止本地数据因硬件故障而丢失。
  3. 版本共享:方便成员之间交换和获取最新代码。
  4. 持续集成基础:为自动化测试、部署等流程提供支持。

  目前常见的 Git 远程仓库托管平台有 GitHub、和 Gitee(码云)等。开发者只需注册账号,即可免费获得远程仓库服务,实现代码的存储、备份与团队协作。简而言之,Git 的核心思想是"每个人都有完整仓库,本地独立开发;通过远程仓库实现代码共享与团队协作"。

10.3 创建远程仓库

10.4 克隆远程仓库_HTTPS

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

注意:不能在gitcode目录下进行,不能在任意一个本地仓库所存在的目录下执行git clone命令

10.5 克隆远程仓库_SSH

下面开始配置密钥:

第⼀步:创建SSH Key。在用户主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有id_rsaid_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,则需要创建SSH Key:

cpp 复制代码
ssh-keygen -t rsa -C "2607584693@qq.com"

  顺利的话,可以在用户主⽬录⾥找到 .ssh ⽬录,⾥⾯有 id_rsa 和 id_rsa.pub 两个⽂件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放⼼地告诉任何⼈。

  id_rsa.pub 复制到码云

在点击确定,输入码云的密码,即可添加成功

现在就可以使用SSH格式克隆仓库了

11 远程操作--向远程仓库推送

12 远程操作--拉取远程仓库

此时远端仓库的内容比本地仓库要新(模拟的情况)

cpp 复制代码
// 远端仓库master的内容,拉取下来并合并到本地的master分支
git pull origin master:master

13 配置 Git--忽略特殊文件

  在日常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让 Git 知道呢?在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git 就会⾃动忽略这些⽂件。

cpp 复制代码
git check-ignore -v d.so

14 给命令配置别名

cpp 复制代码
// 给status起个别名叫st
git config --global alias.st status

15 标签管理

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

15.1 创建标签

cpp 复制代码
git tag v1.0  // 默认给最新的一次commit打标签
git tag    // 查看存在哪些标签

// 查看历史提交的commit id
git log --pretty=oneline --abbrev-commit

// 给以前的某次提交打标签
git tag v0.9 357c1a7    // 357c1a7是commit id

// 给以前的提交打标签,并且添加备注
git tag -a v0.8 -m "important tag:XXX" 9e1ba62

// 查看标签信息
git show v0.9

// 删除标签
git tag -d v0.9

15.2 推送标签

cpp 复制代码
// 推送标签到远端
git push origin v1.0

// 把所有标签都推送到远端
git push origin --tag
cpp 复制代码
// 本地删除标签
git tag -d v1.0

// 删除也是修改操作,推送到远端
git push origin :v1.0

16 总结一下

  通过本文,我们系统学习了 Git 的常用操作,包括本地仓库的创建与配置、工作区、暂存区和版本库的关系、版本回退、撤销修改、删除文件、分支管理、远程仓库、标签管理等内容,并结合实际开发场景介绍了各个命令的使用方法。

  Git 不仅仅是一套命令,更是一种高效的版本管理思想。它通过分布式版本控制机制,使每位开发者都拥有完整的本地仓库,可以独立完成代码开发、版本管理和历史回溯;借助 GitHub、Gitee(码云)等远程仓库,又能够轻松实现代码共享、团队协作以及数据备份。

  对于初学者而言(我就是初学者),熟练掌握 Git 的基本操作已经能够满足绝大多数开发需求。随着项目规模的不断扩大,还可以进一步学习 Git Flow、GitHub Flow、Pull Request、Code Review、CI/CD 等团队协作流程,从而更高效地参与实际项目开发。

  最后,希望本文能够帮助大家建立对 Git 的整体认识,并熟练掌握日常开发中最常用的 Git 操作,为后续的项目开发和团队协作打下坚实的基础。(GPT创作,claude code辅助)

来一段4K珍藏视频,B占抄的。