git点滴记录

记录git知识点,方便随时查看

1. 关键词:同一文件 | 暂存区(stage) | 工作区(work director) | 同时修改
现有一分支master ,其中有一个文件common.txt,内容如下(工作区是clean的),
图1.1
然后修改放入暂存区
图1.2
接下来继续修改工作区中的common.txt文件内容
图1.3
通过上图可以看到,工作区和暂存区都不是clean的,如果要将暂存区的文件内容移回(unstage)工作区,可以以下两种不同的操作过程,结果是否一样呢?

1)第一种是直接使用命令 git restore --staged common.txt , 然后查看文件状态和内容,如下图
图1.4
可以看到该方式暂存区已经clean了,但是暂存区的内容并没有移回工作区

2)第二种方式是先clean工作区,然后在移回暂存区文件内容,如下图
在这里插入图片描述
可以看出先restore工作区文件,然后在restore --staged 暂存区文件,可以使暂存区文件内容移回工作区

-------------------------------------------------------------------------------------------------------------------------------------------

2. 关键词:切换分支 | 暂存区
暂存区不属于某个分支,就像工作区不属于某个分支一样,如果暂存区有内容待提交,切换分支时,会看到暂存区的文件,如下图所示
在这里插入图片描述
如果此时(当前已切换到master)进行提交操作(commit),则暂存区的改动被提交到master分支。

-------------------------------------------------------------------------------------------------------------------------------------------

3. 关键词:合并分支 | fast forwadr --no-ff
合并分支中有 fast forward 和–no-ff,两种方式。两者有何区别?

1)首先看fast forward方式。dev分支有两次提交,如下图所示
在这里插入图片描述
然后将dev合并到master分支(git默认是fast-forward),使用git log --graph命令查看
在这里插入图片描述
从上图可以看出,使用fast-forward无法看到在dev分支有哪些提交记录。 注意:dev分支的每个提交点信息都存在,没有丢失,只是无法识别哪些提交点信息是由dev分支贡献。

2)第二种方式–no-ff。使用命令 git merge --no-ff dev 将dev合并到master分支,合并后查看log如下图
在这里插入图片描述
从上图可以看出, --no-ff 合并方式可以看出哪些提交点由分支dev贡献。注意:合并后会产生一个新的提交点(上图中为6ff57)。

-------------------------------------------------------------------------------------------------------------------------------------------

4. 关键词: reset --soft --hard --mixed
现有一条分支master,新增一文件 a.txt,然后对a.txt增加内容并提交4次,4次提交内容如下图:
第一次提交后:
在这里插入图片描述

第二次提交后:
在这里插入图片描述
第三次提交后:
在这里插入图片描述

第四次提交后:
在这里插入图片描述

1)如下图所示,如果使用 git reset --mixed head~2(默认是–mixed),则回到第二个提交点,第二个提交点之后的提交的内容,都会挪到工作区。经过测试,如果执行该命令之前,工作区和暂存区都有内容(不是clean状态),则工作区,暂存区,第二次提交点之后提交的内容,这三部分全部回到工作区。

在这里插入图片描述
上面的提交是每次新增一行内容,如果第三次提交和第四次提交都是对第二行的内容做修改,比如第三次提交将“222”改为“333”,第四次提交将“333”改为“444”。执行上述命令,则只保留最新内容,如下图
在这里插入图片描述
2)如果使用 git reset --soft head~2,则回到第二个提交点,第二个提交点之后的提交的内容,都会挪到暂存区。经过测试,如果执行该命令之前,工作区和暂存区都有内容(不是clean状态),则暂存区,第二次提交点之后提交的内容,这两部分全部回到暂存区。工作区的内容回到工作区。

和前面一样,如果每次提交都是修改已有的内容,而不是新增内容,则执行该命令后,只保留最新内容。

3)3中方式里,最容易理解的是–hard,如果使用get reset --hard head~2,则回到第二个提交点,第二个提交点之后的提交的内容,都会被擦除。经过测试,如果执行该命令之前,工作区和暂存区都有内容(不是clean状态),则工作区,暂存区,第二次提交点之后提交的内容,这三部分全部被擦除。
如果最后一次提交后,有大量文件被修改,部分修改文件已到暂存区,此时想恢复到最后一次提交的内容状态,可以直接使用命令 git reset --hard head。

经过以上测试,总结如下

--mixed--soft--hard
工作区工作区工作区擦除
暂存区工作区暂存区擦除
快照(已提交)工作区暂存区擦除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值