配置的三个级别
local 针对当前仓库,优先级最高
global 针对当前用户,优先级其次
system 针对系统,优先级最低
四种对象
git 使用40个16进制字符的 SHA-1 Hash 来唯一标识对象,git 有4种对象:
- blob 文本文件,二进制文件,链接文件,是在代码提交到 Stage 区时根据内容生成的二进制文件
- tree 目录结构,包括 tree 和 blob,在进行提交时把 Stage 区中的 blob 对象封装在 tree 中
- commit 存储一次提交的信息,指向一个 tree
- tag 指向固定的历史提交,可以当做是 commit 的别名
git 只关心文件的内容,如果2个文件有同样的内容,它们会指向同一个 blob 对象,文件名等其它信息会存储在 tree 对象中。
git hash-object [file-name]
查看文件的 hash 码
git cat-file -p [id]
显示仓库中对象的类型、大小和内容信息
工作流程
working directory 工作区,日常编辑代码的地方,维护着一个树形结构
git repository 本地仓库,commit 指向的一个树形结构
staging area 暂存区,.git/index 文件,工作区与本地仓库中间的缓存,维护的是虚拟的树形结构,代表的是需要提交的工作的状态
工作区是我们能看到的区域,我们在工作区修改增加代码,完成编辑后,用 git add
将工作区文件添加到暂存区,然后利用 git commit
提交文件到本地仓库。分支就是 commit 的引用,在这些分支上工作会产生各自的历史,分支切换就是 HEAD 引用的移动以及暂存区和工作区的还原,tag 指向一个固定的 commit。
命令
git add
工作区到暂存区
git commit
暂存区到和本地仓库
git rm [file-name]
删除暂存区和工作区的文件
git rm --cached [file-name]
删除暂存区的文件
git mv [old-name] [new-name]
重命名或移动暂存区和工作区的文件
git status
查看工作区和暂存区的区别
git stash save "name"
将工作区放入 stash 栈中
git stash save -a "name"
将工作区和暂存区放入 stash 栈中
git stash pop --index stash@{0}
还原工作区和暂存区
git stash apply --index stash@{0}
还原工作区和暂存区,不删除 stash 中的索引
git stash drop stash@{0}
删除 stash 栈中的索引
git stash clear
清除 stash 栈中的全部索引
git merge --abort
放弃当前合并操作
查看与对比历史记录
git show
显示 git 对象
git log [--oneline] [--decorate] [--graph] [--all]
查看历史记录
git diff [--color-worlds] [--word-diff]
查看工作区与暂存区的区别
git diff [file-name]
查看工作区与暂存区指定文件的区别
git diff --cached
查看暂存区与本地仓库的区别
git diff [提交hash码或者HEAD]
查看工作区与本地仓库的区别
git diff 提交区hash码A 提交区hash码B
查看两个不同提交的区别
git diff 分支A的某个hash码 分支B的某个hash码
两个不同分支间比较
撤销修改
git checkout [file-name]
从暂存区或本地仓库恢复文件,回到最近一次 git commit 或 git add 的状态
git checkout .
从暂存区或本地仓库恢复所有文件,撤销工作区修改,不改变暂存区
git checkout [commit 引用] [file-name]
还原工作区和暂存区
git reset [file-name]
撤销暂存区文件
git reset .
撤销所有暂存区文件,清空暂存区文件,不改变工作区
git reset [commit 引用] [file-name]
还原暂存区
git clean -n [-X|x]
查看执行 git clean 会清除的文件
git clean -f
清除未跟踪的文件,不包括 gitignore 中指定的文件
git clean -x -f
清除所有未跟踪文件,包括 gitignore 中指定的文件
git clean -X -f
保留 gitignore 之外的文件,清除 gitignore 中指定的文件
git revert [commit 引用]
产生一个新的提交来撤销以前的提交
commit 引用可能是 commitID、branch、HEAD、tag。
重写历史记录
git commit 和 git rebase 参考Git-基础2
git reflog
查看 HEAD 引用的历史
git reset --hard HEAD@{n}
回到指定的历史提交,还原暂存区和工作区
git reset --mixed HEAD@{n}
回到指定的历史提交,只还原暂存区,为默认参数
git reset --soft HEAD@{n}
回到指定的历史提交,不原暂存区和工作区
gitignore 文件
- 以'#'开始的行,被视为注释
- 以斜杠“/”开头表示目录
- 以星号“*”通配多个字符
- 以问号“?”通配单个字符
- 以方括号“[]”包含单个字符的匹配列表
- 以叹号“!”表示不忽略(也就是跟踪)匹配到的文件或目录
-
git check-ignore -v [file|folder]
查找 gitignore 文件中匹配该文件的规则
网友评论