小结:
第一次修改->git add->第二次修改->git add->git commit
即每次修改后,如果不add到暂存区,那就不会加入到commit中。
git checkout -- readme.txt
意思:把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
1.是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
2.是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之:就是让这个文件回到最近一次git commit或git add时的状态。
注意:git checkout -- file命令中的--很重要,没有--。就变成了“切换到另一个分支”的命令。
git reset HEAD file
可以把暂存区的修改撤销掉,重新回到工作区。
注意:git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
工作区和暂存区:
工作区:就是电脑能看到的目录,比如我的learngit
暂存区:工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件(已经commit后发版本库)
通常在文件管理器中把没用的文件删了,或者用rm命令删除了:
$ rm test.txt
这个时候Git知道你删除了文件。工作区和版本库就不一致了,此时有两个选择:
1.确实要从版本库中删除该文件,用git rm删掉,并用git commit
git rm test.txt git commit -m "remove test.txt"
文件就从版本库中被删除了
2.确定手误删错了,因为版本库还有,所以可以很轻松地把误删的文件恢复到最新版本。
git checkout --test.txt
小结:
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容