前言
我们知道Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程。
(1)打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。
(2)首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。
git上传文件的流程很容易就能上手,但是对于我来说,还是会有一些小问题时常困扰我,这里记录一下遇到的问题,希望下次碰到能够很快解决。
一、建仓
这里的建仓指的是建立远程仓库。建立远程仓库之后,在建立本地仓库的时候可以分为两种情况,
- 本地没有建立本地仓库,此时使用
git clone 远程仓库地址
即可建立本地仓库,同时在本地仓库也建立与远程仓库名字相同的分支,这时在本地仓添加文件到暂存区、本地仓库、远程仓库,基本不会出啥问题。漂亮!!! - 本地已建立本地仓库,此时使用
git remote add 远程仓库地址
关联一个已存在的远程仓库,但是本地仓库中没有进行过commit操作是无法显示出分支名称的。此时仍然有两种方式来操作:(1)完成一个commit操作,然后使用git push -u 远程仓库名 本地分支名
来关联远程仓库分支并提交;或者(2)先使用git pull 远程仓库名 远程分支名
先将远程仓库中内容拉到本地仓库完成一次合并,之后再进行其他操作。
二、Git撤销操作
1.仅仅删除暂存区里的文件
如果想撤销错误添加到暂存区里的文件,可以输入以下命令:
git rm --cache file_name
我觉得这个命令比较适合文件还未提交到本地仓库,但是不小心提交到暂存区的文件(错误添加到暂存区的文件数很少,使用上述命令慢慢删掉)。这个时候也可以使用一下命令删除错误添加到暂存区的文件:
git reset HEAD
这个命令就会把暂存区中仅add但未commit的文件还原(适合一不小心上传了很多错误添加到暂存区的文件),不过此时需要重新add文件。
2.删除错误提交的commit
有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。
错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。
这个时候,我们必须撤销版本库的修改才能解决问题!
git reset有三个选项,–hard、–mixed、–soft。(–hard等同于使用–merge,还有一个–keep,但具体效果是什么我还不清楚)
//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区。适用于前期已经使用Git rm --cached 删除过暂存区中的文件
git reset --soft 版本库ID
//仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
//彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID
那我们到底应该用哪个选项好呢?
(1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。
(2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
(3)为什么不使用–soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件。
总结
现在感觉对Git是又爱又恨,很有用,但是有时有总是碰到一些错误,有时候虽然能改正这些错误,但是总是会再犯。现在就慢慢记录一些博客,经常来看一下,以后避免再犯类似的错误。