Git心路历程:

  1. 这是啥,我做了啥,怎么conflict了。

  2. 我会了,交给我,都可以。

  3. 学不会,怎么还有rebase·cherry-pick·reflog·bisect。

入门

  • clone, init, add, mv, reset, rm, bisect, log, status
  • branch, checkout, commit, diff, merge, rebase, tag
  • fetch, pull, push

项目历史管理

  • 有向无环图,Git中用DAG表达历史记录,每个节点表示一个版本。

  • 分支和标签也都是节点,同时它们指向它们各自对应的版本。而HEAD指针通常指向分支节点,但HEAD也可以直接指向版本节点。

  • git merge-base 查询两个提交的分叉点

  • 父引用

    • ^后缀表示父对象,如HEAD^指向HEAD的父对象。
    • 如果节点有多个父对象,则用数字区分,HEAD^1 HEAD^2
    • ~后缀是父对象的链式表达。
    • HEAD~2等于HEAD^^
  • git-name-rev - Find symbolic names for given revs

    • git log | git name-rev --stdin
    • 可打印出历史记录相对当前提交的关系。
  • reflog

  • 修订区间查询

    • git log显示一组提交
    • 双点符号,表示两个修订之间的所有记录,HEAD~2..HEAD包括HEAD HEAD^
    • ^前缀表示排除。git log master maint ^next显示master和maint分支的提交,同时排除在next中也存在的提交。
  • git log格式

    • --pretty用来调整输出格式
    • git log --graph --oneline可以图形化输出记录,同时每个提交只有一行信息。

使用Git进行程序开发