1 概念
Git是分布式版本控制系统,与其它集中式的版本控制系统如SVN不同
首先有几个概念,本地、服务器、中央服务器(远程服务器)。Git每一次commit是提交到本本机的服务器,这个不需要联网,正所谓的版本管理,就是要方便我们知道每一个版本,比如回到之前的某个版本(这是其一),而且回退到某个之前的版本,也是从本机的服务器拿的数据,这些都不需要联网。而 SVN 的每一次 commit 都需要联网,这就需要网络的等待。 Git只有在Push、pull 的时候需要联网,而我们平时更多的操作应是commit。再有就是,断网的情况下,SVN也能工作,但是由于没有版本控制的记录,当多人修改后就比较难以快速的合并,但是Git都在本地保存了版本记录,所以大家合并起来就方便得多了。
2 结构
首先有几个概念:
工作区:就是你在电脑里能看到的目录,项目的位置
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
远程仓库:远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
大致流程如下:
1) git add把文件添加进去,实际上就是把文件修改添加到暂存区
2) git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
3 常用命令
3.1 提交
$ git status 显示有变更的文件
$ git add readme.txt 添加当前目录的所有文件到暂存区
$ git commit -m "append GPL" 提交暂存区到仓库区
$ git fetch origin master:tmp 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
$ git push origin master 把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库
3.2 撤销回滚
a. 修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
$ git checkout -- xxx 把文件在工作区的修改全部撤销
b. 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
$ git reset HEAD xxx 把暂存区的修改撤销掉(unstage),重新放回工作区
4 疑问
4.1 merge与rebase合并方式区别
git rebase过程相比较git merge合并整合得到的结果没有任何区别,但是通过git rebase衍合能产生一个更为整洁的提交历史。
如果观察一个衍合过的分支的历史提交记录,看起来会更清楚:仿佛所有修改都是在一根线上先后完成的,尽管实际上它们原来是同时并行发生的。
4.2 pull与fetch拉取代码区别
git fetch 相当于是从远程获取最新到本地,不会自动merge
git pull:相当于是从远程获取最新版本并merge到本地
5 Git在idea中的使用
简单过程:
1) 下载插件 File-Settings-Plugins-下载.ignore
2) 在下面中新建.gitignore文件,直接输入想过滤的文件名
Git在idea中代码提交,大致流程如下: