目录:
一、
1.git diff 命令
二、
1.git 工作区-stage-版本库 关系
2.git 对象库
3.git 版本库与对象库关系
三、
1.git reset
2.git checkout
3.git stash 命令
四、git基本操作
1.删除
2.移动
git diff命令
git diff :显示工作区的最新改动,即工作区与stage的差异。
git diff HEAD:显示工作区与版本库的差异。
git diff –staged:显示stage与版本库的差异。
举例:
此时执行git commit 会将stage的内容提交至版本库,即下图状态:
1.工作区、stage、版本库 之间的关系:
查看工作区、stage、版本库的目录树:
1.查看版本库目录树:git ls-tree –l HEAD
2.查看stage目录树:首先先将stage目录树写入objects:git write-tree 会得到一个哈希串
git ls-tree –l 哈希串 即可查看刚才写入的的目录树
2.Git对象库关系:
利用git cat-file 命令可以查看对象。参数-p:显示内容 参数-t:显示文件类型
3.git 版本库的结构:
HEAD是.git/refs/heads/master 的一个引用,而master即为一个哈希串,通过 git cat-file可以看出,它是一个commit。
demo$cat .git/refs/heads/master
c04a9ef45294528fec63d05fa67e40650e2fb60bdemo$git cat-file -t c04a9ef
commitwhich version checked in?
1.Git reset
用于重置stage
1.git reset [-q] [<commit>] [--] <paths>…
2.git reset [ - -soft| - -mixed|- -hard|- - merge|—keep] [-q] [<commit>]
ps:<commit>为可选项,可以使用引用或者提交ID,如果省略,<commit>则相当于使用了HEAD的指向作为提交ID。
1方法是用指定的提交状态下的文件替换掉stage中的文件,例如git reset HEAD 相当于取消之前执行git add 命令时改变的stage。
2方法会引起重置引用。根据不同的选项,可以对stage区和工作区进行重置。
git reset –hard <commit> 会引发1->2->3动作
git reset –soft <commit> 只会引发1动作
git reset –mixed <commit> 会引发1->2动作(默认就是mixed,即同git reset <commit>)
2.Git checkout
用于覆盖工作区
1.git checkout [-q] [<commit>] [- -] <paths> 用stage文件覆盖工作区文件(前提:commit省略)
2.git checkout [<branch>] 切换分支
3.git checkout [-m] [[-b|—orphan] <new_branch>] [<start_point>] 创建、切换到新分支
git checkout branch 会引发1->2->3 动作
git checkout 汇总显示工作区、stage、HEAD差异
git checkout - -filename 用stage中的filename文件覆盖工作区中的filename文件
git checkout branch - - filename 维持HEAD不变,用branch中的filename覆盖stage与工作区的filename文件
git checkout - -. 用stage中的所有文件覆盖工作区的文件
3.git stash 命令
用于保存、恢复工作进度
1.git stash 保存当前工作进度(stage与工作区)
2.git stash list 显示进度列表
3.git stash pop [- -index] [<stash>] 不加参数会恢复最新保存的工作进度,并将恢复的工作进度从进度中删除
如果提供<stash>参数,则从该<stash>中恢复,恢复完毕删除
- -index 选项除了恢复工作区文件,并尝试恢复暂存区。
4.git stash [save [- -patch] [-k|- -[no-]keep-index] [-q|- -quiet] [<message>]
保存进度并指定说明
-- patch会显示工作区与HEAD的差异,通过差异文件的编辑决定在进度中最终要保存的工作区内容。
-k 或 - -keep-index参数,在保存进度后不会将暂存区重置。默认会将暂存区、工作区强制重置。
5.git stash apply [- -index][<stash>] 恢复工作进度,但是不删除
6.git stash drop [<stash>] 删除一个存储的进度(最新)
7.git stash clear 删除所有进度
8.git stash branch <branch_name> <stash> 基于进度创建分支
4.git 常用操作
1.删除:方法一:git rm file1 file2….(缺点:文件名得一个个删除,方法二直接把本地变更提交,解决此问题。)
方法二:git add –u:将本地变更的文件(被版本库追踪的)记录到stage
恢复删除:方法一:git cat-file –p HEAD~1:filename > localfilename
方法二:git show HEAD~1:filename > localfilename
方法三:git checout HEAD~1 - - filename (最简洁实用的方法)
2.移动:方法一:git mv oldname newname
方法二:mv oldname newname
git add –A (相当于对修改文件git add 对删除文件执行git rm,对新增文件执行 git add)
这种方法git依旧能对内容追踪,感知到文件名的修改。
3.helloworld实例:
git add –i :交互式的添加文件到stage