git commit -amend
有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的commit message的描述有误,这时候你可以使用接下来的这个命令:git commit --amend。
场景1.本地开发代码已提交,提交后发现这次提交的代码有问题,或者漏提交了一些文件,此时,希望达到以下目的:
①修改有问题的代码。
②补足漏提交的文件(一般是新增的文件没有git add .)
③把以上2点相关的代码,和前一次提交的代码合并成1个提交。
④给合并后的这个提交添加新的注释。
解决办法:
--》修改问题代码
--》git add . (把漏提交的文件假如暂存区)
--》执行git commit --amend -m "这里填写提交的注释"
场景2.新接到需求,需要基于master分支拉取一个feature分支,且这个feature分支只有你自己使用(这一点极其重要),由于开发周期较长,你不想每一次都产生一个新的commit,而是每一次commit都修改前一次提交,这样做的好处是,等到你的feature分支提测时,就只有1个干净的commit,没有乱七八糟的提交历史,你只要把这1个commit合并到master里就好了 。
解决办法:在feature分支上,
第1次提交代码时,使用git commit -am "第1次提交的注释"
第2次以后提交代码时,使用git commit --amend -m "这里填写提交的注释"
这样,整个分支可以只有1个commit。
git checkout --file
在我修改了工作区的内容后 使用 git checkout -- <file>到底是从缓存区还是版本库中还原呢 ,对此只有实践才有发言权
第一步:在管理库中添加一个版本:
第二步:在缓存区中添加一个版本:
第三步:修改工作区文档
第四步:第一次使用git checkout -- <file>:
好了这时还原的结果是从缓存区里拉取的还原,貌似CSDN的网友说的更对。别急现在还不能下结论,毕竟廖神怎么会犯这种低级错误呢
第五步:清空缓存区:
附:清空暂存区,所谓的暂存区仅仅是.git目录下的一个index文件罢了,这也是为了什么被称为index(索引)
当删除暂存区内容的时候,其实就是删除index文件中的内容,.git/objects目录中的内容不会被删除。
指令:rm .git/index 直接删除该文件夹即可
第六步:这个时候缓存区没有版本了再次使用git checkout -- <file>:
发现再次执行git checkout -- <file>会报找不到文件,说明git checkout -- <file>不会从版本库中拉取文件
第七步:执行git reset HEAD将HEAD区里HEAD版本给恢复到暂存区
第八步:这个时候缓存区没有版本了再次使用git checkout -- <file>:
结论
通过以上操作,可以得出结论git checkout -- <file>指令是从先从缓存区中拉取版本还原,并不会从版本库中拉取还原。