文章目录

  • 说明
  • HEAD分离状态
  • 准备提交结构
  • HEAD分离状态
  • 操作符 ^
  • 操作符 ~ 和强制移动分支位置
  • 准备提交结构
  • 操作符 ~ 和强制移动分支位置
  • reset 和 revert
  • 准备提交结构
  • 用 reset 撤销提交
  • 用 revert 撤销提交


说明

本教程按照 git在线练习 顺序进行,将在线测试的命令操作落地到 IDEA,使用开发工具来实现所有在线练习中的操作。

你可以结合 git在线练习 来学习本教程,先在线学习git命令,再在 IDEA 中实现相同操作。

HEAD分离状态

准备提交结构

切换到 master 并将 master 重置到第二次提交

idea restcontroller爆红_git

删除 bugFix

idea restcontroller爆红_操作符_02

新建 bugFix 分支

idea restcontroller爆红_重置_03

切换到 master 并做一次提交

idea restcontroller爆红_重置_04

切换到bugFix,并做一次提交

idea restcontroller爆红_重置_05

对 bugFix 再做一次提交

idea restcontroller爆红_重置_06

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_git_07

HEAD分离状态

用哈希值切换到最后一次提交

idea restcontroller爆红_操作符_08

这时,HEAD 和 bufFix 是分离的状态

idea restcontroller爆红_操作符_09

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_git_10

操作符 ^

切换到 master

idea restcontroller爆红_重置_11

现在,HEAD 在 master 位置

idea restcontroller爆红_操作符_12

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_操作符_13

使用操作符 “^” 切换到 c3

git checkout bugFix^

# 在 dos 命令中,^是特殊符号,需要加双引号,所以要写成:
git checkout "bugFix^"

在 Terminal 终端中运行命令

idea restcontroller爆红_重置_14

现在,HEAD 在 bugFix 的上一个提交位置

idea restcontroller爆红_git_15

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_操作符_16

操作符 ~ 和强制移动分支位置

准备提交结构

切换到 master

idea restcontroller爆红_git_17

提交一次

idea restcontroller爆红_操作符_18

再切换到 bugFix 提交一次

idea restcontroller爆红_重置_19

HEAD移动到 master 的上一个提交

git checkout "master^"

idea restcontroller爆红_git_20

bugFix 强制移动到 bugFix^
通过 -f 参数可以强制移动分支的位置

git branch -f bugFix "bugFix^"

idea restcontroller爆红_重置_21

bugFix 分支上现在有一个隐藏的提交:“添加打印-2”,看一下它的哈希值

git reflog

idea restcontroller爆红_操作符_22

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_操作符_23

操作符 ~ 和强制移动分支位置

master 强制移动到隐藏提交上(上一步看到的哈希值)

git branch -f master b6c4

idea restcontroller爆红_操作符_24

bugFix 强制移动到初始提交

git branch -f bugFix bugFix~3

idea restcontroller爆红_重置_25

切换到第二次提交

git checkout "HEAD^"

idea restcontroller爆红_git_26

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_git_27

reset 和 revert

准备提交结构

master 重置到第二次提交,删除 bugFix 分支

idea restcontroller爆红_重置_28

新建 pushed 分支,并提交一次

idea restcontroller爆红_git_29

重新切换到master,再新建 local 分支并执行一次提交

idea restcontroller爆红_操作符_30

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_git_31

用 reset 撤销提交

重置 local 分支到上一个提交

git reset local^

# dos中要加双引号
git reset "local^"

local 的提交被撤销了

idea restcontroller爆红_重置_32

用 revert 撤销提交

先切换到 pushed 分支,然后用 revert 撤销pushed分支的变更

idea restcontroller爆红_操作符_33

revert 会在当前分支上前进一步,生成的新的提交

idea restcontroller爆红_重置_34

新生成的提交与“添加打印2”的提交相同,相当于把“添加打印3”撤销了

idea restcontroller爆红_重置_35

上面的提交历史对照 learngitbranching.js.org 的结构图

idea restcontroller爆红_重置_36