根据廖雪峰官方网站中关于git的介绍,做了总结,方便自己日后查看。
原文查看
前言
Git是分布式版本控制系统,和SVN等集中式版本控制系统不同。对于前者,每台电脑都是一个版本库,不需要进行联网操作,如果要多人合作完成,用户每次在本地版本库更改后可以远程更新到Github,那么其他用户可以直接通过互联网访问,十分方便,即使某个用户的电脑(服务器)出现故障,也可以通过远程版本库追溯;而集中式版本控制系统只有一个中央服务器,如果出现故障,后果…可能和那些删库的老哥差不多了
一、工作区和版本库
1.工作区
这样一个文件夹就是一个工作区
2.版本库(Repository)
如果我们在终端进入到这个文件夹内,输入ls -a 就会显示有 .git 的隐藏文件,这是一个版本库。版本库里面包含了叫stage的暂存区和Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
将工作区的文件添加到本地版本库需要两个步骤:
1.用 git add 把文件添加到暂存区中
2.用 git commit 提交更改,把暂存区的文件提交到当前分支
二、文件管理
如果将在工作区修改完的文件 git add 文件名,就会存入到暂存区,如果对工作区的文件又进行修改,暂存区的内容不会同步更新,必须再次输入 git add 文件名。
换句话说,对于下面的情形版本库中不会记录第二次修改。
而需要像下图所示,每次修改都git add一下
三、版本回退
每次将工作区的文件通过上面的两个指令后都会添加到本地版本库中,可以使用 git log 查看从最近到最远的提交日志.也可以用 git log --pretty=oneline 查看每次提交的commit id
那么言归正传,如果我们想把当前本地版本库回退到之前的版本,怎么办呢?在Git中HEAD表示当前版本(最新提交的版本),上一个版本是HEAD^ ,上上个版本是HEAD^^,当前往上第100个版本就是HEAD~100。我们可以使用git reset命令,如:
git reset --hard HEAD^
此时就回到了上一个版本,这时我们使用 git log 就不会显示最新的那个版本,那么如果又想返回到最新的版本,可以通过
git reflog
返回之前每次提交的commit id,然后在用
git reset --hard commit_id
返回到对应的版本。
四、撤销修改
1.如果在工作区中对文件进行了错误的修改,还没有添加到本地版本库,可以使用
git checkout -- 文件名
此命令是将文件在工作区的修改全部撤销
注意: 这里和切换分支不同,这里有 –,如果不加,就是切换分支了。
2.如果错误修改的文件已经被添加到暂存区了,但还没提交,可以使用
git reset HEAD 文件名
可以把暂存区的修改撤销,重新放回到工作区。(换句话说就是最近的一次git add命令无效)所以 git reset 既可以回退版本,也可以将暂存区的修改回退到工作区。如果想继续撤销工作区的修改就是用1中的指令。
3.如果错误被提交到本地版本库中了,就需要使用第三节中介绍的版本回退,回退到上一个版本,但前提是还没有将本地的版本库推送到远程版本库,不然就gg了
五、删除文件
通常删除文件使用 rm 文件名
这时候工作区和版本库就不一致了,此时有两种情况
- 想把版本库中的文件也删除
git rm 文件名
git commit -m " "
此时文件就从版本库中删除了
- 不小心误删了,那么版本库中还保留这这个文件
git checkout -- 文件名
这个命令在第四节中也有介绍,实质就是用版本库的版本替换工作区的版本,无论工作区是误删还是错误的修改,都可以通过这个命令被替换,从而和版本库一致。
- 如果一个文件已经被git add 到暂存区,想直接删除,可以先删除工作区,在将暂存区的文件也删除
方法一、
rm 文件名
git rm 文件名
---------------
方法二、 //直接将暂存区的文件删除,但是不删除工作区的
git rm --cached 文件名
----------------
方法三、 //强制删除 暂存区,工作区全删掉了
git rm -f 文件名
注意!!!
因为文件还没本commit到本地版本库,不能直接使用git rm 文件名,会有如下图所示的提示,