https://learngitbranching.js.org/

Git Commit(提交)

Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!

Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。

Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因。

  1. git commit -m "提交的信息"

Git Branch(创建分支)

Git 的分支也非常轻量。它们只是简单地指向某个提交纪录 —— 仅此而已。所以许多 Git 爱好者传颂:

早建分支!多用分支!

这是因为即使创建再多分的支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。

  1. git branch new_branch # 创建一个新分支 new_branch

如果你想创建一个新的分支同时切换到新创建的分支的话,可以通过下面的命令来实现。

  1. git checkout -b <your-branch-name>

git merge(合并分支)

git_merge.gif

  1. git branch bugFix # 1. 创建一个分支
  2. git checkout bugFix # 2. 切换到 bugFix 分支,注意 bugFix 旁边有个星号 *
  3. # git checkout -b bugFix # 1、2 两句可以替换成这一句实现
  4. git commit -m "bugFix" # 3. 在 bugFix 提交一次
  5. git checkout master # 4. 切换到 master 分支
  6. git commit -m "master" # 5. 在 master 上提交一次
  7. git merge bugFix # 6. 将 bugFix 合并到 master,此时星号在 mater 分支上
  • 初始状态

image.png

  • 创建 bugFix 分支并切换到其分支上

image.png

  • 在 bugFix 分支提交一次

image.png

  • 切换到 master 分支

image.png

  • 在 master 分支上提交一次

image.png

  • 合并两个分支

image.png

git rebase

第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制” 它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

git_rebase.gif

  1. git checkout -b bugFix
  2. git commit -m "bugFix"
  3. git checkout master
  4. git commit -m "master"
  5. git checkout bugFix
  6. git rebase master
  • 新建分支 bugFix 并切换到该分支

image.png
image.png
image.png
image.png
image.png

image.pngimage.png

git log

查看历史提交记录

HEAD

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

操作符

  • ^
  • ~ ```bash git checkout bugFix^ # 移动 HEAD 到 bugFix 的父节点的提交记录

git checkout bugFix~1 # 同上

git checkout c4 git checkout HEAD^

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/653487/1596431607164-c2d1d1d9-a4dc-450a-8dda-bc619845e5a3.png#align=left&display=inline&height=377&margin=%5Bobject%20Object%5D&name=image.png&originHeight=377&originWidth=424&size=18458&status=done&style=none&width=424)
  2. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/653487/1596431587891-589090b2-c8e9-45a0-bb18-570c732a0785.png#align=left&display=inline&height=349&margin=%5Bobject%20Object%5D&name=image.png&originHeight=349&originWidth=415&size=19922&status=done&style=none&width=415)
  3. ---
  4. ```bash
  5. git branch -f master HEAD~3 # 命令会将 master 分支强制指向 HEAD 的第 3 级父提交。

image.png image.png