Git的基本使用
现在写代码,天天与git打交道,但是对其基本的应用还不是很熟悉,只是在用图形化界面,commit、pull、push等更是不明白底层原理,现在就来梳理一下git的基本用法和底层原理。
Git的底层原理
Git是一个分布式版本控制系统,一听这个可能有点不太明白,什么是分布式版本控制系统?其实结合自己实际使用中的经验可以体会下,我们使用Git的时候,会在本地建立Git仓库,也就是说我们本地已经是一个完整的版本仓库,没有集中的服务器来管理我们的资源,每个电脑的关系可以看下图理解。
每个人的电脑上都是一个完整的版本库,工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git常用操作
下面通过使用Git常用操作来理解Git的原理
创建Git版本库
git init :把文件目录变成Git可以管理的仓库
例如:在D盘下的D:\workspace\gitdemo目录下运行 git init,就是把这个目录初始化为git仓库
D:\workspace\gitdemo>git init
Initialized empty Git repository in D:/workspace/gitdemo/.git/
创建好后,会在当前目录下多了一个 .git的目录 ,这个目录是Git来跟踪管理版本库的
把文件提交到Git版本库
第一步,用命令git add告诉Git,把文件添加到仓库:
git add 文件名
用add增加的文件,一定位于仓库内
第二步,用==git commit ==把文件提交到仓库:
git commit -m "提交的说明"
版本回退切换
git log 查看提交日志
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:
git log
commit 2fab42b5d9942e1ae527006e4a58c9b2fddcfb14 // commit id(版本号)
git reset 回退版本
git reset --hard commit id
知道commit id,我们就可以用git reset 切换文件得版本
版本号没必要写全,前几位就可以了,Git会自动去找
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
git reset 回退版本
git reset --hard commit id
知道commit id,我们就可以用git reset 切换文件得版本
版本号没必要写全,前几位就可以了,Git会自动去找
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
工作区与暂存区
-
工作区
就是你在电脑里能看到的目录,比如我们新建的gitdemo文件夹目录。
-
版本库
工作区有个.git的隐藏目录,这个就是版本库
-
暂存区
版本库里有很多东西,其中最重要的称为暂存区(stage或者index)。还有git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD。三者关系见下图。
git add 把文件添加进去,其实就是把文件修改添加到暂存区。
git commit 提交更改,其实就是把暂存区的所有内容提交到当前分支
远程仓库
1、添加远程仓库
本地仓库要与远程仓库通信,实现远程同步,以github为例,需要以下步骤:
-
在github上新建仓库
-
本地仓库与github上的仓库关联
git remote add origin <github上的仓库地址>
-
将本地仓库的内容推送到远程仓库
git push -u origin master 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
-
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
; -
关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容; -
此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改
-
2、从远程仓库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。会克隆到当前目录下面
git clone git@server-name:path/repo-name.git
;