那个夏天的故事
公元 2024 年某个炎热的夏天 , 几个大一刚有些项目能力的代码人怀揣着一个个代码梦 , 在 QQ 群里一拍即合 : 要搞个项目玩玩 。 尽管那时他们素未谋面 , 但仅仅一个代码梦聚集了几个志同道合之人 , 在那七八月的酷暑里, 凭着一个 QQ 群, 几台破电脑 , 一张桌 , 一杯茶 , 一段代码写一天 。
简单学会以下几个操作后 , 就在 gitee 上建了个仓库 !🤡 , 并没有深入学习 git 的原理 , 直接开干。
不出意外就会出意外 , 遇到代码冲突了 , 由于那时专注于业务代码 , 对于 git 没去深入搞 , 就为了简单操作 🤡: 每个人写代码 , 必须先更新代码 ,然后再写 , 每个人在不同时间负责不同模块 ,这样就没有冲突了 , 如此开发效率就降低了 ! 🤡 现在看看真的拿不出台面 , 因为总在避免一些冲突 , 合并 , 变基等复杂操作 。
如果让我回到那个夏天写代码 , 我要这样学习 git !!!
要点速看
什么是 git ?
Git 是一个分布式版本控制系统。它主要用于管理文件的版本变化,尤其是在软件开发过程中,对代码的修改历史进行记录和跟踪。
分布式的特点
与传统的集中式版本控制系统不同,Git 没有一个单一的中央服务器来存储所有版本信息。
每个开发者的本地机器上都有一个完整的仓库副本,包括代码库的完整历史记录。
这意味着开发者可以在本地进行提交、分支管理等操作,而不依赖于网络连接到中央服务器。
版本控制的本质
Git 能够记录文件的每一次修改,包括修改的内容、修改的时间、修改的人等信息。
这些修改会形成一个版本序列,就像一条时间线一样,用户可以随时查看文件在过去某个时间点的状态。
下图是我之前 git 的提交记录 (年少轻狂 ,只是懂提交 , 克隆 , 回滚等操作 ) , git 提交记录可视化界面 。
我们可以看到每一个时间点对应着一个版本序列 , 哪些天我写代码 写烂了 , 或者环境有问题 , 我可以直接回滚到上一个版本 , 再也不要操心随着 bug越写越多 , 项目都不能跑了😀 。
attention : 多人开发的时候 : 不要把有 bug 的代码上传哦 , 不然你会被揍 , 还好我的伙伴们脾气比较好 😁
一个命令学会git 常用操作
学习一门新的技术 , 可以看这门技术的官方文档 ,巧了的是 , git 的文档是内置的 !
在控制台直接使用 git help的命令 , 可以查看到许多常用指令 , 如此就稳啦 ! 不会就查 , 减少记忆负担 !
输出结果如下 :
我们下面对着这张图了解下每一个指令是干啥的 ?
创建或初始化工作区
- git clone:将一个仓库克隆到新的目录中,用于获取已存在仓库的副本。
- git init:可创建一个空的 Git 仓库,或者对已有的仓库进行重新初始化操作。
处理当前变更
- git add:把文件内容添加到索引(暂存区)中,为后续的提交做准备。
- git mv:用于移动或重命名文件、目录或符号链接。
- git restore:恢复工作树中的文件到特定状态。
- git rm:从工作树以及索引中移除文件。
查看历史和状态
- git bisect:利用二分查找的方式来找出引入某个错误的提交。
- git diff:展示提交之间、提交与工作树等之间的变化情况。
- git grep:打印出匹配特定模式的行。
- git log:显示提交日志,可查看仓库的提交历史记录。
- git show:展示各种类型的对象,如提交、文件等相关信息。
- git status:呈现工作树的当前状态,了解哪些文件已修改、未跟踪等情况。
管理分支历史
- git branch:可列出、创建或删除分支,用于对分支进行相关操作。
- git commit:记录对仓库所做的变更,将暂存区的内容提交到仓库。
- git merge:将两个或多个开发历史合并在一起,实现分支的合并操作。
- git rebase:在另一个基础分支顶端重新应用提交,可整理提交历史。
- git reset:将当前的 HEAD 指针重置到指定的状态,可撤销某些操作。
- git switch:用于切换分支,在不同分支间进行切换操作。
- git tag:创建、列出、删除或验证使用 GPG 签名的标签对象,用于标记特定的提交等。
协作相关操作
- git fetch:从另一个仓库下载对象和引用,获取其他仓库的更新信息。
- git pull:先从另一个仓库或本地分支获取更新,然后将其集成到当前分支,相当于 fetch 和 merge 的组合操作。
- git push:将本地仓库的更新(包括远程引用以及相关对象)推送到远程仓库,实现与远程仓库的同步。
获取帮助
- 可使用
git help -a和git help -g列出可用的子命令以及一些概念指南。 - 若要了解特定子命令或概念的详细信息,可使用
git help <command>或git help <concept>。 - 如需查看 Git 系统的总体概述,可使用
git help git。
小试牛刀
默认你已经安装了 git
- 首先我们要创建一个空的仓库
使用 git init 创建空的项目仓库
.git 目录就是仓库 , git 相关的内容就放在.git 目录里 , 注意 git 仓库里存的是文件的版本 , 而不是文件!!!
- 在控制台操作
windows 系统下的操作
-
- 进入 .git 目录: cd .git
- 列举 : dir (用于列出指定目录下的文件和子目录)
- 跳出当前目录 : cd ..
-
- git config --global user.name "xxx" 全局设置用户名
- git config --global user.email "xxx" 全局设置邮箱名
git config 配置 操作留下责任人 , 多人协作思想 ,老板就知道是谁提交的代码
这是一个 Git 命令,用于设置全局的用户名称。执行这个命令后,可以指定在所有 Git 仓库中使用的用户名。例如,如果将用户名设置为 “张三”,那么在进行 Git 操作(如提交代码等)时,会显示这个用户名作为提交者的名称
-
- git config --list 查看配置
- git status
- 现在和.git 同级目录下新建一个 html 文件
- 再次使用 git status 查看 , 发现 Untracked files
- 使用 git add index.html 添加到仓库
- git commit -m 'xxx' 给这次提交起一个名字 , xxx 是对这次提交的注释
- 再次 git status 查看
暂存区 & 仓库 ?
git 为什么需要暂存区 , 仓库 ,这两个有什么关系 ?
答 : 暂存区是指购物车 , 仓库就是结账的柜台,把购物车中的东西结账 , 暂存区可以多次添加 , 仓库是一次性提交暂存区的所有东西。
假设你在一个代码仓库中有多个文件被修改,但是你只想提交其中一部分文件的修改。
暂存区就提供了这样的灵活性,你可以选择将特定文件或者文件的部分修改添加到暂存区,然后提交这些暂存的内容,而不是一股脑地把所有修改都提交。
例如,你正在开发一个网站项目,同时修改了 HTML 文件(用于页面布局)、CSS 文件(用于样式)和 JavaScript 文件(用于交互)。但你只想先提交 HTML 文件的修改来修复页面结构问题,这时就可以把 HTML 文件的修改添加到暂存区,然后提交。
比如现在 : 在原有文件的基础上 , 添加 a.txt b.txtreadme.md 三个文件
使用 git status 查看
然后我们一个一个文件加入暂存区 , 再一次性提交 a.txt , b.txt ,readme.md
我们再新建一个文件 , 添加一个 c.txt 文件
也进行 add 和 commit 操作
使用 git log
使用 git log --oneline
同一个文件多个版本
比如之前是 " en",并且已经提交了 , 现在修改 html 的内容
使用 git status 查看 , 显示 : modified
把该文件的新版本加进去