文章目录
- 1. 背景
- 2. 基本概念
- 3. 日常工作流程
- 4. 其他常见操作
- 4.1 merge合并操作
- 4.2 tag打标签操作
- 4.3 remoute远程操作
- 4.4 撤销修改
1. 背景
git作为分布式版本控制系统,开源且免费,相比svn集中式版本控制系统存在速度快(HEAD指针指向某次commit实体),离线式(没有网也可以commit),拥有多个完整独立的分支(不同用户本地clone的仓库包含完整记录)。
之前工作都是使用svn进行操作,在使用gitee以及github的时候,需要用到git,将最近学习的知识做一个记录。
2. 基本概念
区域名称 | 描述 |
---|---|
工作区(workspace) | 我们可见的目录,和其他文件夹没什么区别 |
暂存区(stage/index) | 实际为 .git/index 文件,用于保存add的文件列表 |
版本库/仓库(repository) | 用于管理版本的数据库,对应commit操作,会生成commit、tree实体 |
远程仓库(origin/remote) | 服务端的版本库,为专用的git服务器,常见的为gitee、github |
四个区域对应的图示关系如上图,实际上每次commit到仓库中的所有文件,包括-m信息,都会被git转换成一个个实体,它们均存在 .git/objects/xxx
中。git为每一个实体创建一个40字符的SHA值进行标识。
git中包含4种类型的实体:
- blob-存储文件内容
- tree-存储目录结构和文件名
- commit-存储提交的作者、日期、说明等
- tag- 存储指向特定提交对象的引用
引用:
git中,本地分支branch,远程分支remote branch,标签tag都是指向一个commit实体的指针,它们存在于.git/refs/xx中。
指令 | 对应实体 |
---|---|
git add xx | 改变 .git/index,并生成 blob 实体 |
git commit -m “xxx” | 改变.git/HEAD,生成commit,tree实体 |
git tag -a tags_name -m “xxx” | 生成.git/refs/tags/tags_name文件,以及tag实体–>实际指向打标签时的comomit实体 |
3. 日常工作流程
-
准备仓库,适用于本地无仓库,需要从git远程仓库获取代码;
- git clone url;
- git init 适用于没有参考仓库,全新功能开发时;
-
修改代码;
-
放入到暂存区;
- git add xxx
-
提交到本地仓库;
- git commit -m “yyyy”
-
推送到远程仓库;
- 多人开发时,需要先 git pull,更新本地代码,解决本地冲突;
- git push origin(远程仓库别名) master(本地仓库分支,默认master)
-
获取远程库更新;
- git pull [remote] [branch]
4. 其他常见操作
4.1 merge合并操作
大型项目开发中,会存在多个子功能分支,开发完成后,需要合并到主开发分支。
git checkout branche1
git merge branch2
# 存在冲突,需要进行手动解决
4.2 tag打标签操作
项目开发中,某个关键功能实现,为了后续功能不会影响此功能,可以打一个标签,方便后续进行版本控制,找到之前的关键好的功能。
git tag -a tags_name -m "xxx"
4.3 remoute远程操作
本地仓库代码需要提交到服务端,方便多人开发。
git remoute add [remoute_alias] [url]
git pull [remoute_alias] [branch]
git push [remoute_alias] [branch]
4.4 撤销修改
-
add 没有 coommit的修改
-
工作区/暂存区回退
# 使用HEAD引用指向的commit实体内容恢复暂存区 git reset HEAD <file]> # 将工作区和暂存区的状态重置为 HEAD 所指向的最新提交的状态 git reset ——hard HEAD <file>
-
commit的回退
-
撤销一个提交,原理是使用原提交的逆向操作来完成
git revert [commit-sha]
-
-
push的回退
- 同commit,需要重新push即可
标题 \ 指令 | checkout | reset | revert |
---|---|---|---|
主要作用(撤销) | 撤销工作区、暂存区未提交修改 | 回退版本,重置工作区、暂存区 | 撤销某一次提交 |
撤销工作区 | git checkout [file] | git reset HEAD [file] | |
撤销工作区、暂存区 | git checkout HEAD [file] | git reset --hard HEAD [file] | |
回退版本 | git reset --hard [commit] | ||
安全性 | 只针对未提交修改,安全 | 如回退了已push 提交,不安全 | 安全 |
(Git入门图文教程(1.5W字40图)🔥🔥–深入浅出、图文并茂 - 安木夕 - 博客园)
(Git基本介绍(三大分区及核心内部构造) - 风来与你安 - 博客园)