- Git 对象仓库与有向无环图(DAG)模型
- Git 使用有向无环图结构组织提交(Commit)、树(Tree)和二进制对象(Blob),构成版本演进的树形逻辑关系。
- 每个提交指向其父提交,分支和标签则是指向特定提交的引用。
- HEAD:当前所在提交的指针
- 分离头指针(Detached HEAD):HEAD 直接指向某个提交,而非分支引用。
- 通常 HEAD 间接指向某个分支(推荐用法),代表当前工作基于该分支的最新提交。
- 分支(Branch)
- 逻辑上代表一个开发线,实际是指向某个提交的可变指针。
- 创建新分支即基于当前 HEAD(或指定提交)新建一个指针,指向同一提交。
- 分支的推进、合并、变基等操作,本质是对提交图的结构调整与垃圾回收。
- 引用日志(reflog)
- 记录 HEAD 及分支引用等指针的移动历史。
- 旧的“悬空对象”不会立即删除,提供一定时间内的操作撤销能力。
- Git 标签(Tag)
- 常用于标记版本(如
v1.0),默认作用于当前 HEAD。 - 可指定提交,并附加说明信息。
- 使用
git show <tagname>查看标签信息。 - 使用
git checkout <tagname>可切换到该标签对应的提交(进入分离头指针状态)。
- 常用于标记版本(如
- git checkout 命令
- 核心用途:将仓库中某个状态“检出”到工作区。
- 可用于切换分支或移动到指定提交(分离头指针状态)。
- 部分功能已被
git switch和git restore替代。 - 在分离头指针状态下所做的提交属于“匿名分支”,易丢失;建议及时通过
git switch -c <新分支名>创建分支引用,或合并到已有分支。
- git cherry-pick
- 将指定提交的更改应用到当前 HEAD,生成一个新的提交。
- git branch 命令
- 用于创建、删除、重命名和查看分支。
- 创建分支:
git branch <新分支名>(基于当前 HEAD)。 - 删除分支:
git branch -d(安全删除)、-D(强制删除)。 - 重命名分支:
git branch -m <新分支名>。 - 查看已合并分支:
git branch --merged。 - 查看所有分支(包括远程):
git branch -a。 - 分支切换仅移动 HEAD 指针和更新工作区,暂存区和工作目录内容不变。
- 远程分支
- 通常以
<远程别名>/<分支名>形式存在(如origin/main),是本地对远程分支的只读引用。 origin是 Git 默认给远程仓库地址分配的别名。git fetch:下载远程更新,更新本地远程分支指针,不自动合并。git pull=git fetch+git merge(可能引入冲突)。- 推送并关联:
git push -u origin <分支名>。 - 关联现有分支:
git branch -u origin/<分支名>。
- 通常以
- 远程仓库管理
- 查看远程仓库:
git remote -v。 - 查看详细信息:
git remote show origin。 - 添加远程仓库:
git remote add <别名> <URL>。 - 重命名远程:
git remote rename <旧名> <新名>。
- 查看远程仓库:
- 范围语法:
branch1..branch2- 表示在
branch2中存在但branch1中不存在的提交(差集)。 A...B表示两个分支的相对差集(对称差,即不包括共同祖先)。
- 表示在
- git diff 命令
git diff:工作区与暂存区的差异。git diff --staged:暂存区与 HEAD 的差异。git diff HEAD:工作区与 HEAD 的差异。- 也可比较提交或分支:
git diff commit1 commit2。 - 使用
--stat可仅查看更改摘要。
- git reset 命令
- 用于移动 HEAD 和当前分支指针,有三种模式:
--soft:仅移动分支引用,更改保留在暂存区。--mixed(默认):移动分支引用,重置暂存区,更改保留在工作区。--hard:彻底重置分支引用、暂存区和工作区,丢弃所有更改。
- 用于移动 HEAD 和当前分支指针,有三种模式:
git学习笔记2
最新推荐文章于 2025-11-25 15:43:48 发布
815

被折叠的 条评论
为什么被折叠?



