# 主题六:版本控制 (Git)

Git 比较熟悉了,不写太多了,自己建几个仓库多尝试尝试就会了。

git 每一个版本被称为快照。历史记录则由快照组成。

Git 在储存数据时,所有的对象都会基于它们的SHA-1 hash进行寻址。

提交标志采用哈希值,但是不易读。于是添加了引用,方便阅读。引用可以被更新,指向新的提交。

基础

  • git help : 获取 git 命令的帮助信息
  • git init: 创建一个新的 git 仓库,其数据会存放在一个名为 .git 的目录下
  • git status: 显示当前的仓库状态
  • git add : 添加文件到暂存区
  • git commit: 创建一个新的提交
  • git log: 显示历史日志
  • git log --all --graph --decorate: 可视化历史记录(有向无环图)
  • git diff : 显示与上一次提交之间的差异
  • git diff : 显示某个文件两个版本之间的差异
  • git checkout : 更新 HEAD 和目前的分支

分支和合并

  • git branch: 显示分支
  • git branch : 创建分支
  • git checkout -b : 创建分支并切换到该分支
    • 相当于 git branch ; git checkout
  • git merge : 合并到当前分支
  • git mergetool: 使用工具来处理合并冲突
  • git rebase: 将一系列补丁变基(rebase)为新的基线

远端操作

  • git remote: 列出远端
  • git remote add : 添加一个远端
  • git push :: 将对象传送至远端并更新远端引用
  • git branch --set-upstream-to=/: 创建本地和远端分支的关联关系
  • git fetch: 从远端获取对象/索引
  • git pull: 相当于 git fetch; git merge
  • git clone: 从远端下载仓库

撤销

  • git commit --amend: 编辑提交的内容或信息
  • git reset HEAD : 恢复暂存的文件
  • git checkout -- : 丢弃修改

Git 高级操作

  • git config: Git 是一个 高度可定制的 工具
  • git clone --shallow: 克隆仓库,但是不包括版本历史信息
  • git add -p: 交互式暂存
  • git rebase -i: 交互式变基
  • git blame: 查看最后修改某行的人
  • git stash: 暂时移除工作目录下的修改内容
  • git bisect: 通过二分查找搜索历史记录
  • .gitignore: 指定 故意不追踪的文件

资源很多,我只推荐这一个 : learngitbranching