欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Git学习】git add、git checkout、git commit、git reset命令

程序员文章站 2022-03-21 17:01:02
...

工作区~暂存区

git add是将文件添加进暂存区。

git add <文件名>//将文件加入暂存区。
git add .  //将所有文件加入暂存区。

使用git status命令可以查看当前工作区和暂存区有哪些变化,当我们新建或者修改文件时,该文件就变成了untracked状态,即版本库未管理状态。 使用git add命令将文件加入暂存区,等待commit.

【Git学习】git add、git checkout、git commit、git reset命令

查看index索引内容:

【Git学习】git add、git checkout、git commit、git reset命令

从图中可以看出,git很智能的提示了我们,如果我们想把a.txt从暂存区移除,可以使用

git rm --cached <文件名>//将文件从暂存区移除

【Git学习】git add、git checkout、git commit、git reset命令

再次查看index文件,发现a.txt已经从暂存区移除。 而a.txt再次变成untracked状态。

假设:我们已经将a.txt添加进了暂存区,然后更改a.txt内容,如果修改的内容有错误,想撤销修改,我们需要怎么做呢?

git为我们提供了下面命令来撤销工作区的修改。

git checkout <文件名>//撤销工作区某文件的修改,使之与暂存区一致。
git checkout .  //撤销工作区所有文件的修改,使之与暂存区一致。

【Git学习】git add、git checkout、git commit、git reset命令

如上图所示,我们更改了a.txt中的内容后,可以使用git checkout撤销修改。 

暂存区~本地仓库

git commit命令将暂存区的内容添加到本地仓库。

git commit -m "提交信息"//将暂存区的内容保存到本地仓库,并填写提交信息。
git commit -v   //进入vim模式编辑提交信息

 情景一:本地提交的内容有问题,想撤销此次提交怎么做?

可以使用下面命令来撤销暂存区的提交。

git reset --soft HEAD^ //撤销本次提交,将本地仓库回滚到上一个版本,工作区和暂存区不变。

HEAD^表示上个提交版本,HEAD^^表示上上个提交版本,HEAD~n代表前面第n个版本

【Git学习】git add、git checkout、git commit、git reset命令

从上图可以验证,新的提交已经撤销,b.txt又是可提交的状态。而上次的提交并没有真正的删除,而是保存在objects目录下。当前只是将HEAD指针指向了上一次提交,git通过对比暂存区和本地仓库的区别发现b.txt不在本地仓库,所以该文件又可以重新提交。如下图所示:

【Git学习】git add、git checkout、git commit、git reset命令

情景二:文件更改了已经添加到了暂存区,如果想要撤销更改,怎么办?

【Git学习】git add、git checkout、git commit、git reset命令

当我们更改b.txt内容后并加入暂存区,可以使用git diff命令查看工作区、暂存区和本地仓库文件的区别,从上面可以看出,目前工作区和暂存区是更改后的内容,本地仓库是b.txt更改前的内容。 如果我们想撤销更改可以使用下面命令。

git reset --hard HEAD //使用当前提交来覆盖暂存区和工作区
git reset HEAD --mixed(默认)//该操作 可以 拉取最近一次提交到版本库的文件到暂存区 
                         //并且该操作不影响工作区

【Git学习】git add、git checkout、git commit、git reset命令

从上图可以看到,工作区的更改已经被撤销会原来的内容。