git改变历史

来源:互联网 发布:华硕超频软件 编辑:程序博客网 时间:2024/04/30 18:20

一、悔棋
对最近一次提交修改
对刚刚进行的一次或几次提交进行修改或撤销。
1、查看当前版本库的最新两次提交
这里写图片描述
2、修改最新提交的说明
这里写图片描述
3、查看修改后的记录:
这里写图片描述
4、修补提交:最近一次的操作是移动文件时,将原始文件welcome.txt删除了,现在恢复,被重新放回到暂存区了。但是工作区还是有README文件的:
这里写图片描述
5、对最新的提交进行修补
这里写图片描述
6、查看最近的2次提交日志:
这里写图片描述

多步悔棋

多次提交合并
可以取消最新连续的多次提交。多次提交合并为一个完整的提交。
1、查看版本库最近的三次提交
这里写图片描述

将最近的两次提交压缩为一个,并修改提交说明:
1、使用–soft 参数调用重置命令,回到最近两次提交之前:
这里写图片描述
2、查看版本状态和最新的日志(该日志是回到前2步后的日志):
这里写图片描述
3、执行提交操作,即完成最新两个提交压缩为一个提交操作:
这里写图片描述
4、查看提交日志
这里写图片描述

不能直接修改任意处的提交说明,会导致新的提交说明。只能提交合并了。

回到未来:对于历史提交,如果更改其中的一个提交(抛弃提交或合并提交),都会使后续提交发生连锁反应。因为后续提交中都有一个属性是parent的哈希值。
1、查看历史提交
这里写图片描述
2、先把历史提交做一个标记:
这里写图片描述
这里写图片描述
这里写图片描述
3、查看被标记的日志
这里写图片描述

任务:将标记为D的提交取消,或者与标记为C的提交合并。
这里写图片描述

这里写图片描述

以下是第一种情况:抛弃D提交

1、首先,将HEAD指针切换到C,也就是D的父提交,此时处于非跟踪状态(与master不一致)
这里写图片描述
2、将标记为E提交在当前HEAD(也就是标记C)上重放,其中master^与标记E指向同一提交 E。
这里写图片描述
3、将标记为F提交在当前HEAD(也就是标记E)上重放,其中master与F指向同一提交F:
这里写图片描述
4、查看日志,发现D提交不见了,而且最近的两次提交哈希值也不同:
这里写图片描述
5、查看最近的两次提交:
这里写图片描述
6、将master分支重置到新的提交上。要先切换到master分支:
这里写图片描述
这里写图片描述
7、查看分支图:
这里写图片描述

在抛弃D操作之前,工作区的文件:
这里写图片描述
执行抛弃D操作之后,工作区的文件:
这里写图片描述
而且暂存区也没有,完全丢失了:
这里写图片描述

以上都是抛弃D提交的操作,现在恢复原始的样子,

执行CD提交合并操作:

1、恢复初始状态,在master分支上执行:
这里写图片描述

2、将HEAD头指针换换到D(也就是要被合并的提交)
这里写图片描述

3、后退两步,以便C和D融合,此时HEAD指向B:
这里写图片描述

4、重新执行提交,提交说明重用C提交的提交说明:
这里写图片描述
5、将E提交在当前HEAD上重放:
这里写图片描述
6、将F提交在当前HEAD上重放:
这里写图片描述
7、查看日志,发现看不见C的标签:
这里写图片描述
8、将master分支指向最新的提交,先切回到master;
这里写图片描述
9、查看分支图:
这里写图片描述
10、重新恢复:
这里写图片描述

丢弃历史
最早的历史可能不希望也没有必要继续保存,需要抛弃部分早期历史提交的精简版本库用于和他人共享。

假设希望把里程碑C之前的历史提交全部清除,
1、查看里程碑C指向的目录树
这里写图片描述
2、直接从该目录树创建提交
这里写图片描述
3、查看提交,发现这个提交没有历史,也就是没有parent:
这里写图片描述
4、将master分支上里程碑C之后的提交变基到新的根提交上:
这里写图片描述
5、查看日志,当前master分支已经精简了
这里写图片描述
6、虽然提交精简了,但是本地文件并没有变化:
这里写图片描述

0 0
原创粉丝点击