提交记录

  1. 使用“git commit”命令,完成提交

创建分支

  1. 1.使用“git branch 分支名称”命令,完成分支的创建;
  2. 2.使用“git commit”命令,完成分支的提交

合并分支

合并分支有两种方式,merge命令或rebase命令。

merge

切换到主分支上,然后使用merge命令**拉取**分支到主分支上

  • 合并两个分支时会产生一个特殊的提交记录,它有两个父节点。 ```c 1.使用“git checkout 主线名称”命令,切换到主线分支上; 2.使用“git merge 分支名称”命令,完成“分支”合并到“主线”上
  • 举例: 1.将bugFix分支合并到master: git checkout master; git merger bugFix; 2.将master合并到bugFix: git checkout bugFix; git merge master; ```

    rebase

    切换到需要合并的分支,然后使用rebase命令让该分支**跳到**主分支上
  • Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去;
  • Rebase 的优势就是可以创造更线性的提交历史。 ```c 1.使用“git checkout 分支名称”命令,切换到分支上; 2.使用“git rebase 主线名称”命令,将分支rebase到主线分支前面; 3.使用“git checkout 主线名称”命令,切换到主线分支上; 4.使用“git rebase 分支名称”命令,将主线分支rebase到分支前面。
  • 举例: 步骤1:将bugFix分支rebase到master: git checkout bugFix; git rebase master; 步骤2:将master分支rebase到bugFix: git checkout master; git rebase bugFix; ```

    在提交树上移动

    HEAD

    HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录
    HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。 HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

    分离HEAD

    分离的 HEAD 就是让其指向了某个具体的提交记录(提交树的哈希值)而不是分支名。 ```c
  • 举例: 分离前的状态: HEAD -> master -> C1 HEAD 指向 master, master 指向 C1 执行 git checkout C1命令; HEAD完成分离: 变成了 HEAD -> C1 ```

    相对引用

    通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用 。
    相对引用有两种操作方式:
  • 使用 ^ 向上移动 1 个提交记录
  • 使用 ~ 向上移动多个提交记录,如 ~3

    “^”操作符

    ```c
  • 举例1(将分支名称作为相对引用的参照): master^相当于“master的父节点”; master^^相当于“master的第二个父节点”

  • 举例2(将HEAD作为相对引用的参照): git checkout C3;//分离HEAD git checkout HEAD;//使用HEAD向上移动(第一次) git checkout HEAD^;//使用HEAD向上移动(第二次) git checkout HEAD^;//使用HEAD向上移动(第三次) ```

    “~”操作符

    该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。 ```c

  • 举例(一次移动4步): git checkout HEAD~4
    1. <a name="aC0uJ"></a>
    2. ### 强制修改分支位置
    3. 使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。
    4. ```c
    5. 举例:
    6. git branch -f master HEAD~3
    7. 上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
    8. 相对引用为我们提供了一种简洁的引用提交记录 C1 的方式, 而 -f 则容许我们将分支强制移动到那个位置。

    撤销变更

    和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。
    我们这个应用主要关注的是后者。
    主要有两种方法用来撤销变更
  • git reset
  • git revert

    Git Reset

    git reset 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
    在reset后, C2 所做的变更还在,但是处于未加入暂存区状态
    1. 举例:
    2. git reset HEAD~1

    Git Revert

    在本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的。
    为了撤销更改并分享给别人,我们需要使用 git revert
    1. 举例:
    2. git revert HEAD
    3. git revert撤销的提交记录后面会多出一个新提交!
    4. 这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。
    5. 也就是说 C2' 的状态与 C1 是相同的。

    整理提交记录