Git-bash学习资料合集

  1. git 流程图
  2. git_procedure

    相关概念

    • workspace工作区/work tree工作树/work director工作目录
    • stage 暂存区/缓存区/暂存目录/index 索引
    • repository仓库、history版本库、本地仓库、remote远程仓库
    • branch分支、main/master branch主分支、develop branch开发分支、debug分支等
    • tag标签、patch补丁
    • HEAD一个特殊游标
    • 添加删除、(未)追踪、提交撤回、推送/拉取、合并、克隆
    • 以下命令均在Windows系统测试,部分特征可能并不符合Linux系统,如路径大小写;且注意文件中的换行符
    • ...

  3. git help 查看帮助文档
    • git help : 显示常用的命令
    • git help xxx: 打开命令的帮助网页;同git xxx --help
    • -a / --all : 显示所有命令,198行输出
    • --no-external-commands --all: 显示git-*之外的所有命令,189行输出
    • -c / --config : 显示所有配置变量,911行输出
    • -g / --guide : 显示git的概念指南,如核心教程、日常命令、工作流程等
    • -i / --info / -m / --man xxx: 不带xxx都一样,且是默认的显示格式;带xxx,没用(至少再我的windows系统是这样)
    • -w / --web : 在浏览器中显示帮助文档,windows默认

  4. git init 初始化仓库
    • 【Git 'git init' 命令详解】
    • -q / --quiet : 静默模式 仅打印erro/warning信息,成功则无显示;但其实成功初始化也并无太多输出
    • --bare git_dir : 指定仓库信息存放文件夹"repository/版本库",默认.git(不区分大小写)会被视为仓库信息文件夹,其他名字则无效;如果没有参数,只输入--bare,会在当前文件夹生成仓库信息文件,若将该文件夹命名为.git(不区分大小写),则其父目录被视为工作目录
    • --separate-git-dir=git-dir : 指定仓库信息存放文件夹,但在当前文件夹生成一个"链接文件",里面写有git-dir
    • -b branch-name / --initial-branch=branch-name : 指定初始化仓库时创建的分支,默认为master/main,有时候需要main,但初始化默认为master,免得后面再改,再初始化时直接改分支名;或者直接修改全局配置git/etc/gitconfig:[init] defalitBranch=main
    • 其余还有共享、格式等参数,不太懂,用不上
    • .git文件夹详情见.git文件夹

  5. git add 添加文件到暂存区
    • 【Git 'git add' 命令详解】
    • Git add命令详解
    • 【git系列】git-add 含义用法选项示例详解
    • git add
    • git add file : 添加文件到暂存区,可以添加多个文件,用空格隔开,也可以用通配符,如git add .,表示添加当前目录下所有文件
    • -n / --dry-run : 模拟添加,不实际添加,可以用来查看哪些文件会被添加
    • -v / --verbose : 详细输出,显示哪些文件被添加
    • -f / --force : 强制添加,即使文件被忽略(.gitignore),也强制添加
    • -i / --interactive : 交互式添加,可以手动选择哪些文件添加
      • status : 类似于git status;显示以track的文件状态,包括已提交的修改(staged)和(unstaged)
      • update : 类似于git add -u;更新已选中的文件,可以手动选择哪些文件更新,支持正则表达式*-以及移除-
      • revert : 类似于git reset;还原已选中的文件
      • add untracked : 添加未跟踪的文件
      • patch : 不懂,似乎可以保存修改记录应用到其他仓库/分支
      • diff : 类似于git diff;查看文件的更新记录
    • -u / --update : 更新已跟踪的文件,即已添加到暂存区的文件,如果文件有修改,则更新到暂存区
    • --renormalize : 清除CRLF/LF;统一不同系统之间的换行符 : CR——CR,CRLF——LF,CRCRLF——CRLF
    • 其他参数不太懂

  6. git commit 提交暂存区的文件
    • 【Git 'git commit' 命令详解】
    • Git commit命令全面指南
    • 【git系列】git-commit含义用法选项示例详解
    • git commit
    • -m / --message msg : 提交信息,必选参数,否则会进入vim编辑器,输入提交信息
    • -F / --file=file : 从文件中读取提交信息
    • -a / --all : 自动添加已修改的文件到暂存区,再提交,即下次再提交这些文件不用再git add
    • -u / --untracked-files : 显示未跟踪的文件,默认all
    • -v / --verbose : 详细输出,显示哪些文件被提交
    • --dry-run : 模拟提交,不实际提交,可以用来查看哪些文件会被提交
    • --amend : 修改最后一次提交,即修改最后一次提交的提交信息、提交文件、提交人等
    • --no-edit : 不进入vim编辑器,直接提交

  7. git status 查看仓库状态
    • Git status命令详细指南
    • 【Git 'git status' 命令详解】
    • -s / --short : 简短输出,
    • --long : 长格式输出
    • -v / --verbose : 详细输出,显示文件的状态和文件名;类似于git diff --cached -v
    • --ignored : 显示被忽略的文件
    • -u / --untracked-files : 显示未跟踪的文件
    • -b / --branch : 显示当前分支

  8. git diff 查看文件差异
    • Git diff命令详解
    • 【Git 'git diff' 命令详解】
    • git diff : 比较工作区和暂存区的差异,即git diff HEAD
    • git diff --cached : 比较暂存区和最新提交的差异,即git diff --cached HEAD
    • git diff commit1 commit2 : 查看两个提交之间的差异
    • git diff branch1 branch2 : 查看两个分支之间的差异
    • -p / -u / -patch : 生成patch文件;git diff -p > patchfile
    • --color-words / --word-diff : 仅显示已更改的单词而不是整个行;--color-words相当于--word-diff=color;--word-diff还有plain、porcelain、none模式
    • --color / --no-color : 打开/关闭颜色区别不同,红、绿对应删除-、添加+,白色表示未改动
    • --name-only : 仅显示更改的文件名,而不是详细的差异内容
    • --name-status : 仅显示每个已更改文件的名称和状态
    • git difftool : 可视化查看差异;实际上就是左右两个窗口显示文件内容

  9. git log 查看提交记录
    • Git log命令的全面使用指南
    • -p :显示每个提交中引入的差异(diff)。
    • --oneline : 每个提交显示到一行;格式为commit哈希索引 commit信息
    • -n / --max-count / -number : 显示提交的数量
    • --author= / --committer= : 通过作者筛选提交
    • --since= / --until= : 通过时间筛选提交
    • --stat : 查看更改的统计信息
    • --graph : 显示分支和合并历史的图形;单线开发,该选项可能没啥用
    • --decorate : 查看每个提交的分支和标签

  10. git reflog 查看引用记录
    • Git reflog命令使用解释
    • 【Git 'git reflog' 命令详解】
    • -n / --max-count / -number : 显示提交的数量
    • --date= : 显示日期,可选值:relative、iso
    • --grep= : 在提交信息中查找指定内容的提交
      • show : git reflog相当于git reflog show,参数设置参考git log
      • list : 显示所有分支对应的refs
      • expire : 清理过期提交记录;日期可以设置,默认90天前
      • exists : 检查ref是否存在记录
      • delete : 从 reflog 中删除单个条目
    • 有教程说存在--pretty参数,但该版本没有

  11. git shortlog 主要用于查看每个开发者的贡献情况
  12. git show 用于显示有关特定提交的信息
  13. git show-branch 查看多个分支的历史提交记录的命令
  14. git whatchanged 查看提交历史及其具体变动内容
  15. git ls-tree 列出指定提交或分支(包括索引或工作区)中的文件树
  16. git blame 查看文件每一行的修改历史记录的命令
  17. git config 查看和修改 Git 的配置信息
  18. git checkout 切换分支、恢复文件状态、创建新分支等
  19. git switch 简化和改善切换、创建分支
  20. git amend 修改最近的提交
  21. git stash 暂时保存当前分支上未提交的修改,并在需要时恢复它们
  22. git mv 移动或重命名文件,同时自动更新 Git 索引(index)中的信息
  23. git clean 删除这些未被跟踪的文件和目录
  24. git archive 创建仓库内容快照的命令
  25. git gc 垃圾回收
  26. git fsck 检测 Git 仓库中的潜在问题,比如损坏的对象或不一致的引用。
  27. git grep 搜索已经被 Git 跟踪的文件内容,并且能够根据提交历史搜索特定版本的内容
  28. git rev-parse 解析 Git 引用(如分支名、标签、提交哈希等)并输出它们对应的 Git 对象哈希值
  29. git rev-parse 将一个分支或文件的补丁应用到另一个分支或文件上
  30. git format-patch 将一个分支或文件的补丁应用到另一个分支或文件上
  31. git tag 给特定的提交添加标签
  32. git describe获取与指定提交相关的最新的标签及其后续提交信息
  33. git fetch 从远程仓库获取最新代码
  34. .git文件夹详情(包括.gitignore)
    • config: 配置文件
      • repositoryformatversion:仓库格式版本。
      • filemode:视文件权限的修改是否为差异。
      • bare:是否是裸仓库。
      • logallrefupdates:日志更新。
      • symlinks:符号链接。
      • ignorecase:忽略大小写。
    • HEAD: 指向当前分支的指针
    • index: 暂存区文件
    • objects: 是Git仓库的核心组件,保存了所有提交历史和版本信息。
      • pack: 是Git用来存储压缩后的Git对象文件的目录
        • .pack文件:经过打包算法压缩后的Git对象文件,多个Git对象文件被打包成一个.pack文件。
        • .idx文件:.pack文件的索引文件,包含Git对象的索引信息,提高Git对象的访问速度。
      • info目录: 存储一些辅助信息和索引文件,用于加快对象访问速度。
      • 哈希目录:除了上述两个子目录外,objects目录下还包含一系列以两个字符为前缀的子目录,用于存储具体的对象文件。Git使用SHA-1哈希算法对每个对象 进行唯一标识,每个对象的文件名是由哈希值组成的。
    • refs: 存放所有的引用
      • heads:存储分支引用,每个分支都对应一个文件,文件名与分支名称相同。这些文件中的内容是指向分支最新提交的指针
      • tags:存储标签引用,每个标签都对应一个文件,文件名与标签名称相同。这些文件中的内容是指向标签的对象的指针。
      • remotes:存储远程引用,每个远程仓库都对应一个子目录,目录名与远程仓库名称相同。在每个远程仓库目录下,可以存储与该远程仓库相关的引用,如远程分支引用。
    • logs: 存放所有的提交日志
    • info: 包含一些辅助性的信息
    • hooks: 包含一些钩子脚本。git钩子脚本在.git文件夹中存储的是模板文件,需要将其重命名为去掉.sample后缀,并赋予可执行权限,才能生效。每个git仓库的钩子脚本都是独立的,不会被版本控制。
    • description: 描述文件
    • COMMIT_EDITMSG: 最后一次提交的编辑信息
    • ORIG_HEAD: 上一次提交的指针
    • FETCH_HEAD: 上一次获取的远程分支的指针