[Git] 009 逆转未来
其他
2019-05-05 20:14:40
阅读次数: 0
1. 想逆转未来,得先知道时间线(多图警告)
1.1 git log
1.2 git log --oneline
1.3 git reflog
2. 哨兵来了,不是,是任务来了
2.1 查看状态
分析
- 目前再主线上
- 暂存区的最新的文件已经提交至仓库,即此时暂存区的内容与仓库指向的版本内容一致
- 提示中有新命令
git checkout -- <file>
- 红色的
modified
似曾相识
- 之前
git status -s
回馈的红色的 m
就是指 modified
- 这里说明 README.md 与 note_01.txt 产生了变动
- 提示中最后一行说明了
git add
与 git commit -a
有相同的效果
补充
- git 中常见的三种状态
- modified: 已修改
- staged:已暂存
- committed: 已提交
2.2 git checkout -- <file>
- 虽说这条命令要少用,做实验嘛,不妨用一下
- 可以跟多个 <file>,用空格隔开即可
2.3 查看一下
分析
3. git diff
登场
3.1 git diff <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 比较
分析
- 工作区的 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 出来把,时光机!(不好意思,有点中二)
4.3 后悔了,可以利用“id”再回来
- “id”可以不写全
- 上图就是,而且还可以再缩
- 前提是“唯一”
4.4 时光不能倒流,但是 git 可以
4.5 几个注意点
- 时光是倒流了,但无情的岁月会拿小本本写下咱们的“开挂记录”
~
和 ^
可以累加
- 如果记录够多,
git reset --hard HEAD~~
可以回到上上个版本,以此类推
- 也可以用
git reset --hard HEAD~10
,相当于依次往前回滚 10 回
git reset --hard HEAD
,虽没效果,也算一次记录
- 保险的还是先
reflog
,再用哈希值回滚
转载自www.cnblogs.com/yorkyu/p/10814756.html