git commit -amend

发布时间 2023-08-08 18:11:59作者: luckylan

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>指令是从先从缓存区中拉取版本还原,并不会从版本库中拉取还原。