结构说明
Git会对每一步的文件修改进行记录,不论是从简单的修改到最终的确定,以前的基础到继续的开发,都会进行对应的记录。
对于基础的二次开发,必要条件是基于某次的定稿,就是最终的版本,后面的版本切换和分支会进行讲述。
而对于一次问题的修改、完善到定稿过程,分别对应进行修改记录。
分作工作区,缓存区和版本区,对应为草稿、副本、定稿。
初稿可能不止修改一次,定稿也可能有多个版本。对于每份定稿,git都会进行存储。
- 工作区
工作区中,相当于我们的草稿本,可以随意的涂鸦,但是没有记录功能。
- 缓存区
副本区域,添加到该区域,会自动创建副本,当草稿丢失时可以从副本中进行恢复。
- 版本区
版本相当于一次完整的修改操作,此时会将全部的操作进行保存留档。
如果说缓存区是随时可以进行删改的副本记录,版本区就是不可删改的档案管理。
- 入口
我们每次的编辑,都是针对某一项功能进行的。
如果不是重新开发,一般都是基于某个版本的。HEAD指针可以让我们指定一个基础版本进行开发,在整个版本链中,清楚自己所处的位置很重要。认清楚自己的分支,所处的版本是有必要的。
配置及基本命令
- 初始化
git init:把当前文件夹添加git,让git监听当前文件夹
- 用户信息
git config --global user.name "username":username处指定自己的用户名
git config --global user.email "email":引号中指定自己的邮箱
- 查看配置
git config --list:列出配置的全部信息,可以根据用户配置办法指定名称进行配置
- 查看状态
git status:git会把工作区和缓存区的文件进行比较,然后进行提示,如果已经提交且未修改,状态clean
- 查看日志
git log:显示版本信息,可带参数有:
具体情景后面有例子。
- --oneline:分行简短显示
- --decorate:显示分支信息
- --graph:图形显示
- --all:全部信息
向上记录
- 工作区->缓存区
git add file/dir:把指定文件或者文件夹添加到副本区,通配符*表示全部副本备案
- 缓存区->版本区
git commit -m "message":把缓存区写入版本区永久存档,不可更改
-m表示添加版本描述,提交到版本区就不可以再随意删改,每次提交都视作一个新的版本,会进行永久存档
提交到版本区时,缓存区和工作区文件需一致,若有差异,git会进行提示。
向下恢复
- 版本区->缓存区
1. 基础版本回写
git reseat HEAD:通过HEAD入口指向版本,会同时把版本库信息写入缓存库
2. 指定版本回写
git reseat HEAD~:当HEAD后面跟~时,表示进入上一个版本,并把版本库信息写入缓存区
n个~表示向前回溯n个版本,可以简写为~n
3. 指定版本
git reseat ID:通过git log可以查看版本ID,通过ID可以指定写回的版本信息
ID为SHA1,不必全部输入,采用至少前五位即可进行指定
4. 参数指定
--mixed:默认模式,当不写时默认采用,此时会将版本库信息默认写入缓存区
--soft:采用此模式,会切换版本库,但是不会将版本信息写入缓存区
--hard:此模式下,不仅切换版本库,同时将版本库信息写入缓存区和工作区,原先文件会覆盖
- 缓存区->工作区
git checkout -- file:把缓存区中的指定文件,回写到工作区
--两侧都带有空格,区别 后续切换分支操作,file可以是指定全路径文件,可以进行单个文件的覆盖
文件比较
- 工作区->缓存区
git diff:比较工作区中文件和缓存区中文件差异
- 工作区->版本区
git diff ID:比较工作区中文件和版本库文件的差异,通过ID指定版本,不一定是当前基础版本
- 缓存区->版本区
git diff --cached ID:比较缓存区和版本库中文件,版本通过ID进行指定
- 版本区->版本区
git diff ID1 ID2:比较指定两个版本的差异
重新修改
- 修改提交信息
git commit --amend:修改提交提示信息,此操作不会产生新的提交操作,不会重复创建版本仓库,默认打开原文件信息
git commit --amend -m "message" :直接覆盖原提示信息,不会显示原来的提示信息
- 文件重新命名
git mv old_filename new_filename:修改文件名需利用git,否则新文件git不识别,误认为旧文件删除和新文件添加
- 文件删除
git rm filename:删除文件,包括工作区和缓存区
git rm --cached filename:仅删除缓存区中文件,工作区中文件保留
git rm -f filename:强制删除文件
分支操作
- 添加分支
git branch branch_name:为当前版本创建分支,默认分支为master,branch_name为新分支名称
- 查看分支
git log --decorate:详细列出日志,带分支名称
git log --graph:图形显示分支及流程
git log --all:全部信息
- 切换分支
git checkout branck_name:切换到指定名称的分支上面
- 删除分支
git branch -d branch_name:删除指定名称的分支
-d为delete简写,全拼一般通过--指定
git branch --delete branch_name
- 合并分支
git merge branch_name:将指定名称的分支合并到当前版本中
- 匿名分支
git branch HEAD~:当操作不当时,会创建一个无名分支,即匿名分支
分支可进行改动和提交操作,但不会影响到其他分支,当切换其他分支时,该分支无法再次被检索到
git branck branch_name ID:退出时,是最后的机会,如果需要保留该匿名分支,git会最后提醒为该分支创建名称
通过指定名称和ID,为匿名分支创建名称
如果ID指定的是当前已经存在的分支,则该名称也会指向该分支
回顾
1. 工作流程为版本库的串联关系,主线master只有一条,持续在此基础上进行迭代。
2. 分支算是小master,全部的改动最终回归到主线上
3. 每个版本的开发过程中总是要修改,副本保存和最终完成,因此开发中常用三个库