Git | 青训营笔记

85 阅读4分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第2篇笔记

概念

  • 对象

    • Commit:包含提交的信息及指向Tree的指针

    • Tree:存储目录,包含指向Tree和Blob的指针

    • Blob:存储文件,包含文件内容

    • Tag: 附注标签,包含指向其他对象的指针

  • 对Commit的引用

    类型:

    • SHA-1值:Commit的标识符,可以用其四位及以上的前缀替代(只要无冲突)

    • branch:指向一个Commit的指针,可以移动

    • tag:指向一个Tag或Commit的指针,固定的别名

    • HEAD:指向当前branch或当前Commit的指针

    • @{u}:HEAD分支的上游分支

    运算:

    • C^:C的父Commit

    • C~N:C的第N个祖先Commit

  • 三个目录

    • HEAD(已提交)

    • index(暂存区)

    • 沙盒(工作目录)

命令

仓库创建

  • git init;初始化仓库

  • git clone;克隆仓库,即 git init, git remote add, git fetch, git checkout

基本工作

  • git status:查看当前状态

    • -s:短格式
  • git diff:查看状态差异

    • 默认:比较工作目录和暂存区
    • --cached:比较暂存区和HEAD提交
  • git log:查看提交历史

    • --stat:显示内容变化的统计信息
    • -p:显示内容变化
    • -n:只显示最近n次提交
    • --pretty=:指定格式,如online, format:
    • --graph:显示分支历史
  • git show:查看对象信息

    • --stat:显示内容变化的统计信息
    • --pretty=:指定格式,如online, format:
  • git add:添加文件或目录到暂存区

    • -A:添加所有文件
    • -i:交互式
  • git commit:将暂存区提交

    • -m:提交消息
    • -a:提交前添加已追踪文件的修改到暂存区
    • --amend:修改上一次提交
  • git stash:管理储藏

    • 默认:储藏工作目录和暂存区相对于HEAD的修改
    • -m:提交时附带信息
    • --keep-index:提交时不储藏暂存区
    • -u:提交时包含未追踪的文件
    • apply:应用储藏
    • --index:应用时恢复暂存区
    • list:列出储藏
    • pop:删除并应用储藏
    • drop:删除储藏
  • git tag:管理标签

    • 默认:列出标签,或创建轻量标签到HEAD提交或指定提交
    • -l:查找标签
    • -a:创建附注标签到HEAD提交或指定提交
    • -m:附注标签消息
  • git rm:删除文件

    • 默认:从工作目录和暂存区删除
    • --cached:从暂存区和HEAD提交删除
    • -r:递归删除
    • -f:强制删除
  • git mv:移动和重命名文件,即 mv, git rm, git add

  • git reset:移动HEAD分支到指定提交(如果指定提交),以及替换索引区的全部或指定文件为新的HEAD

    • --soft:移动HEAD和HEAD分支
    • 默认:移动HEAD和HEAD分支,然后替换暂存区
    • --hard:移动HEAD和HEAD分支,然后替换暂存区,并且替换工作目录
    • 特别地,若无指定分支,则替换工作目录为暂存区

分支

  • git checkout:移动HEAD到指定提交,并替换索引区和工作目录

    • -b:创建新分支,移动HEAD到该分支
    • -t:创建新分支并指定上游分支(可以用-b指定名称),移动HEAD到新分支
  • git branch:管理分支

    • 默认:列出分支,或创建新分支到HEAD或指定提交
    • --all:包含远程分支
    • -v, -vv:显示分支信息
    • -t:指定上游分支
    • -u:重设上游分支
    • -m:重命名分支
    • -d:删除分支
  • git merge:合并分支 对当前分支所处提交、目标分支所处提交、当前分支和目标分支的公共父提交进行三方合并,形成一个新提交;若有冲突则需要手动解决后提交;若当前分支和目标分支间具有祖先关系,则会进行快速合并

  • git mergetool:提示合并冲突

  • git rebase:重新排序分支 将当前分支自与目标分支分叉以来的所有提交,改为作用于目标分支所处提交。(删除这些提交,并分别形成新的提交)

    • --onto:指定变基起点提交、变基终点提交、目标提交
    • -i:交互式,可以编辑历史提交,将编辑后的提交序列作用于目标提交
    • --amend:修改正在编辑的提交
    • --continue:完成正在编辑的统计
  • git cherry-pick:将指定提交作用于当前分支,形成新提交

  • git revert:将指定提交的相反效果作用于当前分支,形成新提交 -m:有多个父提交时,指定其中一个被保留 -n:不创建新提交,仅更换工作目录

  • git fetch:从远程仓库拉取分支或标签,默认当前分支拉取其上游分支

    • --tags:同时拉取标签
    • --all:推送所有分支
  • git pull:拉取并合并上游分支,即 git fetch, git merge

    • --rebase:使用git rebase替换git merge
  • git push:推送分支或标签到远程仓库,默认当前分支到其上游分支

    • --tags:同时推送标签
    • --all:推送所有分支
    • --delete:删除远程分支
  • git remote:管理远程仓库

    • 默认:列出远程仓库
    • -v:显示远程仓库信息
    • add:添加远程仓库
    • rm:删除远程仓库
    • rename:重命名远程仓库
    • set-url:修改远程仓库地址
    • show:显示远程仓库信息
    • update:更新远程仓库