这篇使用讲解主要针对,本地仓库和远程仓库之间的一些使用。
在讲解开始前,首先你得拥有一个本地仓库,进入你的项目文件夹,而后用git bash或者你的shell执行git init
你便得到了一个本地仓库。
本地仓库的空间
git的本地仓库有三个概念:工作区、暂存区和版本库。
我们知道本地仓库除了我们能看到的文件以外,还有一个.git目录,我们能看到的这些文件就是我们的工作区,而.git就是git的版本管理得以存在的根本,称之为版本库。
版本库中有一个index文件,那就是暂存区。
还有一个objects文件夹,里面存放了不同版本的文件。
git还有一个分支的概念,分支相关文件在.git/refs下,每个分支中可能存在若干个版本,而当前使用的版本则有一个head指针指向,head文件在.git/refs/heads下,虽然叫做指针,但其实就是对应版本的哈希值。
哈希值对应的版本可在.git/objects中找到,哈希值的前两位是文件夹名字,后38位是对象名字。
首先,当前工作区会对应于某一分支,当我们在工作区对文件进行了修改以后,可以通过git add
命令来将修改从工作区提交至暂存区,再通过git commit
命令来提交至对应的分支下,具体来说是提交至obejcts并修改head的方式,至此我们就在该分支下得到了一个新版本。
你肯定很好奇分支中到底有哪些版本,git log
可以满足你,而标有head的版本就是当前版本了。
tips:
分支的查看:1 git status
2 git log
3 .git/HEAD文件
常用命令的意义
git add <file> //将修改从工作区提交至暂存区
git commit -m //将暂存区文件提交至对应分支并
git checkout -- <file> //将已修改未提交至暂存区的文件恢复
git fetch //从远程仓库获取远程仓库中每个分支的最新版本的哈希值
git merge branch //将后一个分支和当前分支所有的版本合并到当前分支,并创建一个新版本作为当前分支的head,用以记录合并变化的信息
git pull //相当于远程的merge,不过是每个分支与从远程仓库的分支进行合并
git diff //比较工作区与暂存区
git diff --cached //比较暂存区与最新版本
git diff HEAD //比较工作区与最新版本
修改的撤销
修改后未提交至暂存区
git checkout -- <file>
从暂存区提取文件
修改后已提交至暂存区或对应分区
先使用git log
找到分支前一版本或某一你需要的版本的哈希值
再通过git checkout <hash> <file>
从某一版本中取出对应的文件
或者通过git reset <hash>
直接获取某一版本的所有文件,该操作会消除所有该版本以后提交的版本,慎用
一些猜想:
当checkout未指定hash值或者分支的时候,默认是从暂存区获取文件
分支名字可以代指分支最新版本哈希值
不成熟的小建议
1.多用git status查看当前情况
2.进行文件恢复之前,用diff查看变化情况
3.多用diff,merge以后,checkout之前,总之变更之前,不确定,就用diff和status看一下
4.尽量不要reset,失去部分版本,你永远不知道会发生什么
5.即使只在本地,也建议使用一个本地仓库,另外一个文件夹作为远程仓库
远程仓库(git服务器)的建立
首先,你得有个项目文件夹
其次,你应该把它git本地仓库
git init
接着,你要得到一个裸仓库,这个裸仓库就是你远程仓库的雏形
git init --bare <git本地仓库文件夹> <xxx.git>
你会得到一个xxx.git的文件夹,称之为裸仓库,然后你就可以把它放置于某个你能访问到的地方,通过ssh或者直接指定目录(本地)
最后,你只需对你的本地仓库依次git add
git commit
git push
就ok了,其中git push
需指明地址,第一次的话还需指明分支,它看起来是这样的:
git push --set-upstream <address> master