Git 文档阅读

Git 中文文档

有空可以看看这个 Git 笔记汇总

Chapter 1 起步

版本控制

  1. 集中化版本控制(CVCS)缺点

    1. 中央服务器的单点故障就无法协同工作
    2. 本地只有快照,项目整体和其变更历史只保存在服务器上
  2. 分布式版本控制(DVCS)优点

    1. 代码仓库完整地镜像下来,包括完整的历史记录
    2. 用户在本地保存了所有改动,每一次的克隆都是对仓库的完整备份
    3. 可以指定和若干不同的远端代码仓库进行交互

Git 简史

  1. 并行开发
  2. 完全分布式
  3. 速度快
  4. 数据量大

Git 简介

  1. 大多版本控制工具都是基于差异的,存储文件随时间变化的差异,而Git储存项目快照或索引
  2. Git 安全性优,只做增不做删;完整性好,使用SHA-1 哈希算法
  3. 文件的四种状态:已提交(committed)、已修改(modified)、已暂存(staged)、未跟踪(untracked)
  4. 项目的三个阶段:工作目录、暂存区域以及 Git 仓库
  5. 工作流程:修改文件、暂存文件、将暂存区文件快照永久存在Git目录

Git 配置

git config --list --show-origin

  1. /etc/gitconfig 系统通用配置 git config --system
  2. ~/.gitconfig 当前用户配置 git config --global
  3. .git/config 当前项目配置 git config --local

Chapter 2 基础

Git命令只能控制当前文件夹和子文件夹内的修改

常用命令

git init 【初始化仓库】

git clone [OPTIONS] <url>【克隆仓库】

  • [-b master]克隆指定分支

git status [OPTIONS] 【查看文件状态 】

  • [-s] 简要文件状态信息

git add <file> 【跟踪新文件、已修改的文件放到暂存区、合并时把有冲突的文件标记为已解决状态 】

git diff [OPTIONS] <file>【已修改文件与已暂存文件的内容差异】

  • [–staged] 显示暂存区和上一次提交的差异

git blame [OPTIONS]【追踪代码提交历史】

  • [ -L 200,300 <file>] 追踪某些行代码修改的历史 commit

git rm [OPTIONS] <file> 【删除文件】

  • [-f] 强制移除存在未提交修改的文件
  • [ --cached] 文件保留在工作区中,从Git仓库和暂存区中删除

git commit [OPTIONS] 【提交文件】

  • [-m <message>] 提交备注
  • [–amend] 追加提交
  • [-a] 直接将工作区和暂存区的所有修改一起提交

git mv <oldfilename> <newfilename> 【移动文件/改名】

git log [OPTIONS] 【回顾提交历史】

  • [–stat] 显示每次提交的简要信息
  • [-p] 显示每次提交的详细信息
  • [–pretty=format:“xxx”] 自定义信息格式
  • [–oneline --graph --all] 显示提交历史、各个分支的指向以及项目的分支分叉情况
  • [–since] 限制时间

git reset [OPTIONS] <HEAD>【回退版本,可以指定退回某一次提交的版本,直接删除某些commit的内容】

  • [–soft] 回退到某个版本
  • [–mixed] 默认,用于重置暂存区的文件与上一次的提交保持一致(取消暂存),工作区文件内容保持不变
  • [–hard] 撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交

git checkout [OPTIONS]【在不同的分支之间切换、恢复文件、创建新分支,git switch 和 git restore 可以代替它】

  • [.] 放弃所有工作区的修改
  • [-f] 放弃工作区和暂存区的所有修改
  • [<branch-name>] 从当前分支切换到指定的分支
  • [-b <local_new_branch_name> <remote_new_branch_name>] 将远程仓库里指定的分支拉取到本地,并在本地创建一个分支与指定远程仓库分支关联起来,并切换到新建的本地分支中

git remote [OPTIONS] 【列出当前仓库中已配置的远程仓库

  • [-v] 列出当前仓库中已配置的远程仓库,并显示它们的 URL
  • [add <remote_name> <remote_url>] 添加远程仓库,指定一个远程仓库的名称和 URL,将其添加到当前仓库中
  • [remane <old_name> <new_name>] 将已配置的远程仓库重命名
  • [show <remote_name>] 显示指定远程仓库的详细信息,包括 URL 和跟踪分支
  • [remove <remote_name>] 从当前仓库中删除指定的远程仓库
  • [<remote_name> <new_url>] 修改指定远程仓库的 URL

git fetch <remote_name> <local_branch_name> 【获取远程仓库的更新,但不自动合并到你的工作】

  • [–all] 获取远程的所有分支

git push [OPTIONS]【推送到远程分支】

  • [<remote_name> <local_branch_name>:<remote_branch_name>]

  • [<remote_name> --delete <branch_name>] 删除远程分支

  • [-u <remote_name> --all] 本地的仓库和远程仓库进行关联

  • [–set-upstream <remote_repository> <local_branch_name>] 将本地分支与远程分支关联

  • [–force] 强制提交,会覆盖所有 behind 的提交

git pull <remote_name> <branch>【git fetchgit merge 的组合,拉取到本地分支并合并】

git tag [OPTIONS]【列出已有的标签】

  • [-l <通配符>] 查询某些对应标签
  • [<version>] 轻量标签(提交校验和存储到一个文件中)
  • [-a <version> -m <comment>] 创建附注标签(数据库中的一个完整对象, 可以被校验)
  • [-d] 删除标签

git rebase <cur_branch> <target_branch> 【将提交到某一分支上的所有修改都移至另一分支上】

git revert <commit_id>【生成一次新的commit冲抵原来的commit,不会修改原有的提交历史,而是通过添加新的提交来撤销更改】

git merge <branch> 【合并指定分支到当前分支】

git switch [OPTIONS] <branch-name> 【切换分支,与 git checkout 类似,但提供了更清晰的语义和错误检查】

  • [-c] 创建一个新分支并切换到该分支

git show 【对于提交,它显示日志消息和文本差异;对于标签,它显示标签消息和引用对象】

git restore [OPTIONS] 【恢复或撤销文件的更改】

  • [.] 还原所有未提交的更改
  • [<filename>] 丢弃工作区修改
  • [–staged <filename>] 将暂存区的修改放回工作区
  • [–source=<commit> <file>] 将文件恢复到特定提交的状态

git branch [OPTIONS] 【查看本地分支】

  • [<branch_name>] 创建本地分支
  • [-b <branch_name>] 创建本地分支并切换
  • [-v] 每个分支的最后一次提交
  • [-vv] 跟踪信息
  • [-r] 查看远程分支
  • [-D <branch_name>] 删除分支
  • [–set-upstream-to <remotename>/<remote_branch> <local_branch>] 跟踪远程分支。在本地新建一个分支后,需要做远程分支关联,目的是在执行git pull, git push操作时就不需要指定对应的远程分支
  • [–merged --no-merged] 合并/未合并到当前分支的其他分支
  • [-m <old_branch_name> <new_branch_name>] 改名

git stash [OPTIONS] 【贮藏工作】

  • [list] 列出所有贮藏
  • [apply] 恢复贮藏

忽略/不跟踪文件

.gitignore 正则表达式:官方样例文件

Chapter 3 分支

相关命令合并到 Chapter2 中

  1. Git 中 HEAD是一个指针,指向当前工作位置
  2. git mergetool 图形化冲突解决工具
  3. 有 Git 特性演化出的开发工作流:长期分支、主题分支

变基

如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作。

工作原理:提取<topicbranch>内的修改并存为临时文件,然后将HEAD指向<basebranch>,最后以此将之前另存为临时文件的修改依序应用

Chapter 6 GitHub