Git是一种分布式版本控制系统,由Linux之父Linus开发。git
所谓分布式版本管理系统,就是在每一台机器上都有一个完整的仓库。数据库
Git官网:gitbash
在官网上能够获取Git的安装软件。分布式
除此以外,还能够下载《progit》——这是最棒的Git学习资料,并且有中文版本。ide
从 https://git-scm.com/downloads
官方下载地址下载对应的操做系统版本一步步安装便可。学习
安装完成以后,在任意目录下,右键 Git Bash Here
操作系统
全局配置邮箱和用户名(–global
表示全局配置,也能够不配置,每一个仓库单独配置).net
$ git config --global user.name "test" $ git config --global user.email test@qq.com
Git有四个工做区域:版本控制
工做区code
简单说工做区就是咱们项目的目录。
仓库区/本地仓库
工做区有一个.git
目录,其实这个不是工做区,是Git的版本库,存储了Git仓库的全部版本信息
暂存区
暂存区域是一个文件,保存了下次将提交的文件列表信息,通常在 Git 仓库目录中。 有时候也被称做“索引”,
不过通常说法仍是叫暂存区域。
远程仓库
对于分布式版本管理系统,远程仓库不是必须存在的,可是一般项目都会有远程仓库。例如Github
就是咱们很是熟悉的远程仓库。
基本的Git工做流程以下:
以上几个区域的关系能够用下图表示:
分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,因此在同一个数据库里能够同时进行多个不一样的修改。
Git 为咱们自动建立的第一个分支,也叫主分支,通常其它分支开发完成后都要合并到 master
在git中,文件主要有四种状态:
Untracked: 未跟踪, 此文件在文件夹中, 但并无加入到git库, 不参与版本控制. 经过git add
状态变为Staged
.
Unmodify(Committed): 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中彻底一致. 这种类型的文件有两种去处, 若是它被修改, 而变为Modified
. 若是使用git rm
移出版本库, 则成为Untracked
文件
Modified: 文件已修改, 仅仅是修改, 并无进行其余的操做. 这个文件也有两个去处, 经过git add
可进入暂存staged
状态, 使用git checkout
则丢弃修改过, 返回到unmodify
状态, 这个git checkout
即从库中取出文件, 覆盖当前修改
git commit
则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify
状态. 执行git reset HEAD filename
取消暂存, 文件状态为Modified
看完上面的Git基础,你可能有一些迷惑,接下来,咱们以实际工做中开发的流程来加深对Git的理解吧。
能够经过在工做区使用git init
来初始化一个Git仓库,但一般开发中咱们不会这样作,由于实际的项目大部分已经进行了部分开发,并进行了版本管理,因此咱们首先作的是从远程仓库克隆项目。
这里我从Gitee(通常开发项目的远程仓库是部署在内网的GitLab) fork
了一个开源项目,将这个项目做为远程仓库的项目:
点击克隆下载
,能够看到项目的路径,
HTTPS
是凭据式的路径,使用此路径,向远程仓库推送代码的时候须要凭据(帐号密码);
这种方式向远程仓库提交,会要求帐号密码,输入完成以后,Win10操做系统能够选择记住凭据,这样就不用每一次都输入了,Win10操做系统管理凭据
控制面板 → 用户账户 → 凭据管理器 → Windows凭据
SSH
是秘钥式的路径,向远程仓库推送代码的时候,须要本地的私钥和远程仓库的公钥对应。
SSH配置能够参考 Windows配置Github、Gitee共存的Git环境,这里就不详细展开讲解。
我已经进行了公私钥的配置,因此这里选择SSH。
使用git clone
命令克隆项目
项目已经成功克隆,接下来要进行咱们的开发了。
一般开发不是在Master
分支上,而是在开发分支上,使用 git branch develop
建立一个新分支:
能够经过git branch
命令列出全部分支:
能够看到咱们新建的分支。
使用git checkout develop
命令切换到新建的develop分支:
接下来,咱们再develop分支上进行一些开发操做,我这里对 redeme 进行了一些修改,须要把修改添加到暂存区。
首先经过 git status
命令查看工做区文件状态
git add README.md
命令(可使用git add .
添加全部修改)将更改添加到暂存区能够看到文件已经添加。
接下来使用`git commit -m "