基本概念
- 工作区:仓库的目录。工作区是独立于各个分支的。
- 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
解析:结构类似一棵树,有一个head节点,每次更新的时候,把暂存区里的内容存在节点里,然后把head往后移一位 - 版本库:存放所有已经提交到本地仓库的代码版本
- 版本结构:树结构,树中每个节点代表一个代码版本。
命令解析:
- git config –global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
- git config –global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
- git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
- git add XX:将XX文件添加到暂存区
git add .:将所有待加入暂存区的文件加入暂存区
创建一个project文件夹,git init初始化为git仓库,然后创建一个readme.md文件,git status查看状态时候显示有文件没有加入缓存区域。
{:width=”80%” height=”80%”}
使用git add readme.md命令后,显示文件已经存入暂存区
{:width=”80%” height=”80%”}
- git rm –cached XX:将文件从仓库索引目录中删掉
执行git rm –cached readme.md指令之后,git就不会管理他了,但是git restore –staged readme.md只是将文件从暂存里拿出来,还是会继续管理它
- git commit -m “给自己看的备注信息”:将暂存区的内容提交到当前分支
commit提交到当前分支(每次commit完暂存区会清空),此时会创建出一个分支,名为“add readme.txt(md)”
{:width=”80%” height=”80%”}
{:width=”50%” height=”50%”}
- git status:查看仓库状态
- git diff XX:查看XX文件相对于暂存区修改了哪些内容
如果修改了文件的内容,可以用git diff来比较差别,其中:
当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”
参考:git diff的最全最详细的4大主流用法
下图展示了如果修改了文件+222,那么就会显示出来。
{:width=”80%” height=”80%”}
然后继续add和commit,把修改的文件从暂存区加入分支,此时head节点会移动到下一个分支
{:width=”80%” height=”80%”}
{:width=”50%” height=”50%”}
- git log:查看当前分支的所有版本
可以用git log –pretty=oneline把信息集中到一行
{:width=”80%” height=”80%”}
{:width=”50%” height=”50%”}
- git reset –hard HEAD^ 或 git reset –hard HEAD~:将代码库回滚到上一个版本
git reset –hard HEAD^^:往上回滚两次,以此类推
git reset –hard HEAD~100:往上回滚100个版本
git reset –hard 版本号:回滚到某一特定版本
往前回滚两个版本,此时log只显示最初的记录
{:width=”80%” height=”80%”}
- git reflog:查看HEAD指针的移动历史(包括被回滚的版本)
git reflog会记录head指针的移动历史记录,但是git log只会存从起点到当前节点的路径,二者是有区别的
{:width=”50%” height=”50%”}
通过reflog查看版本号,用reset设置版本号的形式回到某一个版本
{:width=”80%” height=”80%”}
- git checkout — XX或git restore XX:将XX文件尚未加入暂存区的修改全部撤销
假设此时修改了readme文件,但是不想修改了,想回到之前,就可以用git restore,但是这里的之前不是指之前的版本,是指暂存区里的内容,例如在文件中新增了555,然后add到暂存区中,之后又新加了666,但是不想要这个666了,就可以用restore命令来回到555的内容。(将工作区的修改回到暂存区的内容)
{:width=”80%” height=”80%”}
{:width=”80%” height=”80%”}
暂存区不仅可以添加,也可以删除,例如增加两个文件之后再删除
{:width=”80%” height=”80%”}
如果是误删了文件,例如误删了a.txt,可以用git restore –stage a.txt把它从暂存区取出来,然后git restore a.txt就可以恢复这个文件。(因为restore是把尚未加入暂存区的修改撤销!)
{:width=”80%” height=”80%”}