[Git] 009 逆转未来

1. 想逆转未来,得先知道时间线(多图警告)

1.1 git log


1.2 git log --oneline

  • 此命令的显示结果比 git log 简洁


1.3 git reflog

  • 此命令显示的记录比前两者完整


2. 哨兵来了,不是,是任务来了

2.1 查看状态


分析

  1. 目前再主线上
  2. 暂存区的最新的文件已经提交至仓库,即此时暂存区的内容与仓库指向的版本内容一致
  3. 提示中有新命令 git checkout -- <file>
    • 此命令用来舍弃更改
    • 会用暂存区的内容覆盖工作区
  4. 红色的 modified 似曾相识
    • 之前 git status -s 回馈的红色的 m 就是指 modified
    • 这里说明 README.md 与 note_01.txt 产生了变动
  5. 提示中最后一行说明了 git addgit commit -a 有相同的效果

补充

  • git 中常见的三种状态
    • modified: 已修改
    • staged:已暂存
    • committed: 已提交

2.2 git checkout -- <file>

  • 虽说这条命令要少用,做实验嘛,不妨用一下
  • 可以跟多个 <file>,用空格隔开即可


2.3 查看一下



分析

3. git diff 登场

3.1 git diff <file>

  • 可以比较工作区的 file 与暂存区的不同


分析

  • 因为此时工作区的文件是从暂存区回退过来的,两者一样,所以没有回馈

3.2 加参数 --cached


分析

  • 当前暂存区与上一个暂存区的 note_01.txt 是一样的

3.3 换参数 HEAD

  • git diff HEAD <file> 可以比较工作区的 file 与仓库中当前版本的 file 的不同


分析

  • 工作区的 file 与仓库中当前版本的 file 的相同
  • 其实从 2.1 分析的第 2 条也可以看出
    • 暂存区的内容提交到了仓库,说明暂存区与仓库当前版本一致
    • 又暂存区回滚给了工作区
    • 所以此时三者是一致的
  • 当然,从 2.2 的图也可看出
    • nothing to commit, working tree clean
    • 又工作区没有变动
    • 所以此时三者是一致的

3.4 HEAD 升级

  • 利用 1.3 的图中的哈希值代替 HEAD 可以使工作区的 file 与仓库以往版本的 file 比较


  • 如,我要与 HEAD@{3} 比较


分析

  • 工作区的 note_01.txt 与仓库中版本号为 “9884432” 的note_01.txt 又区别
    • 2. git status 查看 下方多了两行
    • 其实还有一行空行,即文末的回车,git 并没有算它

3.5 继续升级

  • 有了哈希值做 id,可以比较的东西就多了
  • git diff --chcaed <id> <file> 让暂存区的 file 与仓库以往版本的 file 进行比较


  • git diff <id1> <id2> <file> 让仓库中不同版本的 file 的比较


分析

  • 绿色说明增加了 xxx
  • 红色说明减少了 xxx
  • 这里是 <id1> 与 <id2> 相比,两者换一下顺序,结果会变


3.6 在网上看到一张关于 diff 的图片,我就不重复造轮子了


4. 说好的“逆转未来”呢

4.1 先说原因

4.2 出来把,时光机!(不好意思,有点中二)

  • git reset --hard HEAD~


4.3 后悔了,可以利用“id”再回来

  • git reset --hard <id>


  • “id”可以不写全
  • 上图就是,而且还可以再缩
  • 前提是“唯一”

4.4 时光不能倒流,但是 git 可以

  • git reset --hard HEAD^


  • 有些版本的 ^ 需要加引号,如
    • git reset --hard HEAD"^"

4.5 几个注意点

  1. 时光是倒流了,但无情的岁月会拿小本本写下咱们的“开挂记录”


  1. ~^ 可以累加
    • 如果记录够多,git reset --hard HEAD~~ 可以回到上上个版本,以此类推
    • 也可以用 git reset --hard HEAD~10,相当于依次往前回滚 10 回
  2. git reset --hard HEAD,虽没效果,也算一次记录
  3. 保险的还是先 reflog,再用哈希值回滚

猜你喜欢

转载自www.cnblogs.com/yorkyu/p/10814756.html
009