Git 核心原理与基础操作详解 (上)
Git 作为分布式版本控制系统,广泛应用于软件开发全流程。文章涵盖 Git 在 CentOS、Ubuntu 及 Windows 系统的安装方法,详细解析工作区、暂存区、版本库三大区域机制。包含创建仓库、配置用户信息、文件添加与提交、查看历史、版本回退、撤销修改及删除文件等基础操作。此外还深入讲解分支管理,涉及分支创建切换合并、冲突解决、分支模式(Fast forward)、Bug 分支修复策略及临时分支处理,帮助开发者掌握 Git 核心原理与实操技能。

Git 作为分布式版本控制系统,广泛应用于软件开发全流程。文章涵盖 Git 在 CentOS、Ubuntu 及 Windows 系统的安装方法,详细解析工作区、暂存区、版本库三大区域机制。包含创建仓库、配置用户信息、文件添加与提交、查看历史、版本回退、撤销修改及删除文件等基础操作。此外还深入讲解分支管理,涉及分支创建切换合并、冲突解决、分支模式(Fast forward)、Bug 分支修复策略及临时分支处理,帮助开发者掌握 Git 核心原理与实操技能。

在软件开发的全流程中,版本控制是保障协作效率、规避开发风险的核心基石。Git 作为目前最流行、最强大的分布式版本控制系统,已渗透到从个人开发到大型企业级项目的每一个环节。
编写文档或代码时,为了防止丢失或修改失误,往往需要复制多个副本(如 v1, v2, 最终版等)。随着版本增多,管理变得困难。如何解决?使用版本控制器。
版本控制器能记录工程的每一次改动和版本迭代,方便多人协同作业。目前最主流的版本控制器就是 Git。
注意事项: 所有的版本控制系统(包括 Git)只能跟踪文本文件的改动(如 TXT、网页、程序代码),可以显示具体行级的变化。图片、视频等二进制文件虽然能被管理,但无法跟踪内部变化,只能记录文件大小变化。
Git 是开放源代码的代码托管工具,最早在 Linux 下开发,现已支持 Linux、Unix、Mac 和 Windows 平台。
以 CentOS 7.6 为例:
首先检查是否已安装:
git
若未安装,会提示 git: command not found。
安装 Git:
sudo yum -y install git
查看版本:
git --version
以 Ubuntu 22.04 为例:
检查是否已安装:
git
若未安装,提示 Command 'git' not found。
安装 Git:
sudo apt-get install git -y
查看版本:
git --version
Windows 用户可前往官网下载并安装 Git for Windows。
仓库是进行版本控制的一个文件目录。创建 Git 本地仓库对应的命令为 git init。
执行后当前目录下会多出一个 .git 隐藏目录,这是 Git 来跟踪管理仓库的目录,包含诸多细节,不要手动修改。
安装 Git 后需设置用户名和邮箱地址:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
--global 选项表示这台机器上所有 Git 仓库都会使用该配置。若不添加该选项,则仅在当前仓库生效。
查看配置:
git config -l
删除配置:
git config [--global] --unset user.name
git config [--global] --unset user.email
.git 目录下的 index 文件中。.git,它不算工作区,而是 Git 的版本库。工作机制:
git add 命令时,暂存区目录树的文件索引会被更新。git commit 时,master 分支会做相应的更新,暂存区的目录树才会被真正写到版本库中。在包含 .git 的目录下新建一个 ReadMe 文件,可以使用 git add 命令将文件添加到暂存区:
git add [file1] [file2] ...git add [dir]git add .再使用 git commit 命令将暂存区内容添加到本地仓库中:
git commit -m "message"git commit [file1] [file2] ... -m "message"注意:-m 选项后跟描述本次提交的 message,由用户自己完成。
提交成功后可使用 git log 命令查看历史提交记录:
git log --pretty=oneline
显示的 commit id 是一个 SHA1 计算出来的十六进制数字。
.git 目录结构说明:
git add 后会更新该内容。查找 object 时将 commit id 分成 2 部分,前 2 位是文件夹名称,后 38 位是文件名称。可使用 git cat-file 命令查看版本库对象的内容。
示例:新增 file4 和 file5,只对 file4 执行了 git add 然后 commit。
结果:只有 file4 被提交,file5 未被提交。因为 git add 是将文件添加到暂存区,git commit 是将暂存区的内容添加到本地仓库中。若要提交 file5,需再次 add 并 commit。
Git 跟踪并管理的是修改,而非文件。
查看当前仓库状态:
git status
显示文件被修改过,但未完成添加与提交。
查看具体差异:
git diff [file]
或查看版本库和工作区的区别:
git diff HEAD -- [file]
执行 git reset 命令用于回退版本。
语法格式:
git reset [--soft | --mixed | --hard] [HEAD]
HEAD 说明:
若 commit id 丢失,可使用 git reflog 命令补救,该命令用来记录本地的每一次命令。
情况一:工作区的代码,还没有 add。
使用 git checkout -- [file] 命令让工作区的文件回到最近一次 add 或 commit 时的状态。
注意 -- 很重要,切勿省略。
情况二:已经 add,但没有 commit。
使用 git reset --mixed 参数,可以将暂存区的内容退回为指定的版本内容,工作区文件保持不变。此时暂存区干净,工作区有修改。如需丢弃工作区修改,可结合 git checkout -- [file]。
情况三:已经 add,并且也 commit 了。
可以使用 git reset --hard HEAD^ 回退到上一个版本!前提是还没有把本地版本库推送到远程。
在 Git 中,删除也是一个修改操作。
直接删除文件后,git status 会告诉你哪些文件被删除了。要删文件,除了删除工作区的文件,还要清除版本库的文件。
若确实要删除:
git rm [file]
git commit -m "remove file"
分支就是科幻电影里的平行宇宙。每次提交,Git 把它们串成一条时间线,这条时间线就可以理解为一个分支。截止到目前,只有一条时间线,即 master 分支。
HEAD 严格来说不是指向提交,而是指向 master,master 才是指向提交的,所以 HEAD 指向的就是当前分支。
创建分支:
git branch dev
Git 新建了一个指针叫 dev,* 表示当前 HEAD 指向的分支是 master 分支。
切换分支:
git checkout dev
HEAD 指向了 dev,表示成功切换到 dev 上。
合并分支:
git merge dev
用于合并指定分支到当前分支。Fast-forward 代表'快进模式',直接把 master 指向 dev 的当前提交。
合并完成后,dev 分支就没用了,可以删除。
git branch -d dev
注意如果当前正处于某分支下,就不能删除当前分支。
实际分支合并时可能会遇到代码冲突。
演示:创建新分支 dev1,修改 ReadMe 并提交。切换至 master,修改 ReadMe 并提交。此时尝试合并 dev1 到 master,会出现冲突。
Git 会用 <<<<<<<, =======, >>>>>>> 来标记出不同分支的冲突内容。必须手动调整冲突代码,并再次提交修正后的结果。
通常合并分支时,如果可能,Git 会采用 Fast forward 模式。在这种模式下,删除分支后,查看分支历史时,会丢掉分支信息。
Git 支持强制禁用 Fast forward 模式,那么就会在 merge 时生成一个新的 commit。
git merge --no-ff -m "merge message" dev
加上 -m 参数把描述写进去。这样从分支历史上就可以看出分支信息。
在实际开发中,应遵循基本原则:
假如正在 dev2 分支开发,发现 master 上有 bug 需要修复。
Git 提供了 git stash 命令,可以将当前工作区信息进行储藏,被储藏的内容可以在将来恢复。
git stash
git stash pop
建议在合并前先在本地分支合并 master,解决冲突后再让 master 去合并 dev,避免影响 master。
添加新功能时,最好新建一个 feature 分支,开发完成后合并,最后删除该 feature 分支。
若中途停止开发,可使用 git branch -d 删除分支。若分支未合并,删除时会报错,需使用 -D 强制删除。
敬请期待下一篇文章内容–>深入剖析 Git 的原理和使用 (下) 相关内容!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online