文章目录
- 1. 创建本地仓库以及提交修改过程
- 2. 配置本地仓库`git config`:
- 3. `git status`
- 4. 版本回退
- 5. 撤销修改
首次要明确, git中有三个区, 工作区, 暂存区(index目录), 版本区(远程分支). 还有一个库-对象库
1. 创建本地仓库以及提交修改过程
git init
, 之后当前目录下中就会多一个git文件夹(git文件夹称为版本库
, 包含配置信息以及暂存区(index)等, 版本库中的文件一般不允许被手动修改, 因为风险极高, 稍有不慎就会破坏仓库), 当创建一个项目要存放在本地仓库进行管理时, 要将项目放在工作区
, 工作区是当前本地仓库中除了版本库外的区域 但是, 当前的项目仍不能被git进行管理. 需要先add, 以下介绍详细流程:
- 在工作区创建新目录
git add 文件名/.
将工作区中的目录添加到暂存区
中, 此时会在对象库
中保存版本的修改信息
, 在暂存区中存储的是指针
, 指向对象库中的修改信息
. 使用git log
可以查看所有的提交记录git commit -m "提交描述"
将暂存区中的指针提交到版本库, 版本库中存储的也是指针(commit id), 指向对象库中的版本信息. (可进行多次add, 一次性提交到版本库)- 版本库的master有一个头指针, HEAD, 在git文件夹中可以找到该文件. 该文件中存储的是master的路径, 在master中存储的是最近一次提交的commit id, 该commit id可以在Object目录(对象库)中找到, 里面包含本次提交的详细信息和上次提交的commit id.
2. 配置本地仓库git config
:
- git config user.name “zhangsan” // 为当前本地仓库设设置用户名
- git config user.email “123@qq.com”
- git config --unset user.name // 重置当前本地仓库用户名
- git config – unset user.email
- git config -l // 查看配置信息
- git config --global user.name “zhangsan” // 为当前机器中所有本地仓库设置用户名
- git config --global user.email “123@qq.com”
- git config --global --unset user.name
- git config --global --unset user.email
3. git status
这条命令有两个作用, 第一查看上一次提交到现在有没有对工作区中的内容进行修改
, 这条命令只能看到有哪个文件被修改过, 具体的修改详情还需要git diff 文件名
, 这条命令是查看工作区和暂存区中的区别. 另外git status
还可以查看有没有添加到暂存区但是没有提交到版本库的文件
.
4. 版本回退
-
git reset [--soft | --mixed | --hard] [HEAD]
git reset --soft
: 只回退版本区, 不回退工作区和暂存区
git reset --mixed
: 只回退版本区和暂存区, 不回退工作区(默认)
gti reset --hard
: 回退版本区, 暂存区和工作区 (慎用) -
首先
git log
查看历史修改信息, 拿到要回退版本的commit id, 然后git reset --mixed commit_id
-
如果使用了
git reset --hard
, 导致工作区中的修改也被回退, 想要恢复工作区中的修改时, 需要得到之前一次的commit id, 执行git reset commit_id
, 而这个commit id可以通过git reflog
得到 -
版本回退为什么速度这么快:
git
中有一个HEAD指针, HEAD指针中存放的是master路径, 也就是HEAD指针指向了master, 而master存放的是最近一次commit id, 具体的commit id操作记录在了对象区中, 当进行版本回退时, 仅仅是修改了master中的commit id, 所以速度非常快. 而对象区中的内容并没有被删除, 这也是为什么当版本回退之后还能找到之前的commit id, 回退到之前的版本.
5. 撤销修改
撤销修改分为三种情况, 这三种情况的解决方式都有一个前提(没有push提交到远程仓库):
- 当前修改只存在于工作区, 此时要将代码变为最近一次add或commit的状态, 可以用
git checkout -- 文件名
- 当前修改添加到了暂存区, 此时要将代码变为最近一次commit的状态
使用git reset --mixed HEAD 文件名
/git reset -- hard HEAD
(这里因为HEAD指向measter, measter指向最近一次的commit, 所以可以用HEAD代替commit_id, 另外, 如果想退到当前提交的前一次提交, 使用HEAD^
), 此时就将暂存区中的内容与版本区中的内容同步了, 之后使用git checkout -- 文件名
即可 - 当前修改添加到了版本区
git reset -- hard HEAD^