- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
版本控制工具:Git 基础与进阶
版本控制工具:Git 基础与进阶
版本控制是软件开发不可或缺的核心实践。它记录文件内容的变化,允许回溯历史、协作开发、解决冲突。Git 是目前最流行、功能最强大的分布式版本控制系统 DVCS。
Git 基础概念
-
仓库 Repository: 存储项目的全部文件、历史记录和元数据。分为本地仓库和远程仓库。
-
工作目录 Working Directory: 项目当前可见的文件状态,即从仓库中检出的文件。
-
暂存区 Staging Area 或 Index: 一个中间区域,用于暂存你想要在下次提交中包含的更改。
-
提交 Commit: 记录项目某个特定时间点的快照。每个提交都有一个唯一的 SHA-1 哈希值作为标识符,包含作者、日期、提交信息以及指向前一个提交的指针。
-
分支 Branch: 指向某次提交的可变指针。默认主分支通常是
main或master。分支是 Git 并行开发的关键。 -
HEAD: 指向当前所在分支的指针,通常也就是指向当前分支的最新提交。
Git 基本工作流程
基本的 Git 流程包括:在工作目录修改文件,将修改添加到暂存区,然后将暂存区的修改提交到本地仓库。
基本命令
-
git init:在当前目录初始化一个新的 Git 仓库。 -
git clone <url>:克隆远程仓库到本地。 -
git status:查看工作目录和暂存区的状态。 -
git add <文件名>或git add .:将文件或所有修改添加到暂存区。 -
git commit -m "提交信息":将暂存区的更改提交到本地仓库。 -
git log:查看提交历史。 -
git diff:查看工作目录与暂存区,或暂存区与最新提交之间的差异。 -
git remote add origin <url>:关联远程仓库。 -
git push origin <分支名>:将本地分支推送到远程仓库。 -
git fetch origin:从远程仓库获取最新提交,但不合并。 -
git pull origin <分支名>:从远程仓库获取最新提交并合并到当前分支(相当于git fetch后跟git merge)。
Git 分支管理
分支是 Git 的核心特性之一,它允许开发者在不影响主线开发的情况下进行实验或开发新功能。
-
git branch:列出所有本地分支。 -
git branch <分支名>:创建一个新分支。 -
git switch <分支名>(或git checkout <分支名>):切换到指定分支。 -
git switch -c <新分支名>(或git checkout -b <新分支名>):创建并切换到新分支。 -
git branch -d <分支名>:删除指定分支(需先切换到其他分支)。 -
git merge <分支名>:将指定分支的更改合并到当前分支。
合并 Merge
当你在一个分支上完成工作并希望将其集成到另一个分支时,使用 git merge。
-
快进合并 Fast-forward Merge: 如果目标分支自创建你的分支以来没有新的提交,Git 会直接将目标分支的指针移动到你的分支的最新提交,速度快且不会产生新的合并提交。
-
三方合并 Three-way Merge: 如果目标分支在你创建分支后有了新的提交,Git 会找到两个分支的共同祖先,并将三个版本(共同祖先、当前分支最新提交、待合并分支最新提交)进行合并,生成一个新的合并提交。
合并冲突 Merge Conflicts
当 Git 尝试合并两个分支时,如果同一个文件的同一部分在两个分支上都被修改,Git 无法自动决定使用哪个修改,就会发生合并冲突。你需要手动编辑文件,解决冲突标记,然后 git add 并 git commit 来完成合并。
Git 进阶主题
-
Rebase 重定基:
git rebase <目标分支>将当前分支的修改“移动”到目标分支的最新提交之后。它会重写提交历史,使提交看起来是基于目标分支的最新状态进行的,形成更线性的历史记录。与 Merge 相比,Rebase 使历史更干净,但会改变现有提交的 SHA-1 值,不应用于已推送到公共仓库的提交。 -
Stashing 暂存:
git stash临时保存当前工作目录和暂存区的更改,以便切换到其他任务,而无需提交一个不完整的提交。git stash pop或git stash apply恢复暂存的更改。 -
Tagging 标签:
git tag <标签名>给历史中的某个特定提交打上永久性标签,常用于标记发布版本。标签可以是轻量标签(仅一个指向提交的指针)或附注标签(包含额外信息和签名)。 -
Cherry-pick 摘樱桃:
git cherry-pick <提交哈希>将指定的单个提交应用到当前分支。适用于只需要从另一个分支引入少量特定提交的情况。 -
Git Internals 内部原理: Git 的核心是内容寻址文件系统。
.git目录包含了仓库的所有历史和元数据。对象 Objects 是 Git 存储数据的基本单元,包括:-
Blob:存储文件内容的快照。
-
Tree:存储目录结构,包含文件名和指向 Blob 或其他 Tree 的指针。
-
Commit:存储提交元数据(作者、日期、信息)和指向一个 Tree 对象(代表该提交时的目录状态)以及父提交的指针。
-
Tag:指向提交或其他 Git 对象的引用。
Index 暂存区实际上是一个文件,记录了下次提交时工作目录树的预定状态。
-
-
Workflow Strategies 工作流策略: 基于 Git 提供灵活的分支和合并能力,演化出了多种协作模式,如 Gitflow、GitHub Flow、GitLab Flow 等,它们规定了如何使用分支进行功能开发、发布管理和热修复。
掌握 Git 基础是高效开发的前提,理解并运用进阶特性可以更好地管理复杂项目和协作流程。分布式特性赋予了 Git 强大的灵活性和离线操作能力,使其成为现代软件开发不可或缺的工具。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...