美文网首页
Git-基础3

Git-基础3

作者: zhulichao | 来源:发表于2020-07-22 09:09 被阅读0次

    配置的三个级别

    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 文件中匹配该文件的规则

    相关文章

      网友评论

          本文标题:Git-基础3

          本文链接:https://www.haomeiwen.com/subject/ghzuhktx.html