1.Git介绍
Git 是目前世界上最先进的 分布式 版本控制系统,有这么几个特点:
1. 分布式 :是用来保存工程源代码历史状态的命令行工具
2. 保存点 :保存点可以追溯源码中的文件,并能得到某个时间点上的整个工程项目额状态;可以在该 保存点将多人提交的源码合并,也可以退到某一个保存点上;
3.离线操作性 :Git可以离线进行代码提交
4.基于快照 : Git 提交是将提交点指向提交时的项目快照,提交的东西包含一些元数据 ( 作者 , 日期,
GPG 等 );SVN 等老式版本控制工具是将提交点保存成补丁文件
5.Git 的分支和合并 :分支模型是 Git 最显著的特点 , 因为这改变了开发者的开发模式, SVN 等版本控制 工具将每个分支都要放在不同的目录中,Git 可以在同一个目录中切换不同的分支 ;
6.分支即时性 :创建和切换分支几乎是同时进行的 , 用户可以上传一部分分支 , 另外一部分分支可以隐 藏在本地,不必将所有的分支都上传到GitHub 中去 ;
7.分支灵活性 :用户可以随时创建合并删除分支 , 多人实现不同的功能,可以创建多个分支进行开发 , 之后进行分支合并,这种方式使开发变得快速, 简单 , 安全。
工作流程
一般工作流程如下:
1.克隆 Git 资源作为工作目录。
2.在克隆的资源上添加或修改文件。
3.如果其他人修改了,你可以更新资源。
4.在提交前查看修改。 提交修改。
5.在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
下图展示了 Git 的工作流程:
基本概念
我们先来理解下 Git 工作区、暂存区和版本库概念:
1.工作区 :就是你在电脑里能看到的目录。
2.暂存区 :英文叫 stage 或 index 。一般存放在 .git 目录下的 index 文件( .git/index )中,所以我 们把暂存区有时也叫作索引(index )。
3.版本库 :工作区有一个隐藏目录 .git ,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
1.图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区
( stage/index ),标记为 "master" 的是 master 分支所代表的目录树。
2.图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个 " 游标 " 。所以图示的命令中出现
HEAD 的地方可以用 master 来替换。
3.图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
4.当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件
索引中。
5.当执行提交操作( git commit )时,暂存区的目录树写到版本库(对象库)中, master 分支会做
相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
6.当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
7.当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
8.当执行 git checkout . 或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文
件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
9.当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
基础常见命令
创建仓库
git init
初始化仓库
git clone
拷贝一份远程仓库,也就是下载一个项目。
提交与修改
git add
添加文件到仓库
git status
查看仓库当前的状态,显示有变更的文件。
git diff
比较文件的不同,即暂存区和工作区的差异。
git commit
提交暂存区到本地仓库。
git reset
回退版本。
git rm
删除工作区文件。
git mv
移动或重命名工作区文件。
提交日志
git log
查看历史提交记录
git blame
以列表形式查看指定文件的历史修改记录
远程操作
git remote
远程仓库操作
git fetch
从远程获取代码库
git pull
下载远程代码并合并
git push
上传远程代码并合并
创建版本库
1. 新建文件夹,用于放置开发文件
2. 通过 git init 命令把这个目录变成 Git 可以管理的仓库:
$ git init
此步之后目录下会出现一个 .git 的目录,这个目录是 Git 来跟踪管理版本库的,这个目录是默认隐藏的,但是不要去动这个文件夹的东西,不然会破坏Git 仓库。
3. 使用 git add 将文件添加到Git仓库:
$ git add readme.txt
4. 用命令 git commit 把文件提交到仓库:
$ git commit -m "1.0.0"
- m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
到此为止,你成功的在本地仓库维护了一个版本
关联远程仓库
推送
1. 在 GitHub 或者 Gitee 等平台注册并新建仓库
2. 关联远程仓库
$ git remote add origin 仓库地址
添加后,远程库的名字就是 origin ,这是 Git 默认的叫法,也可以改成别的
3. 第一次推送本地库内容到远程库
$ git push -u origin master
把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程。
由于远程库是空的,我们第一次推送 master 分支时,加上了 - u 参数, Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令
4. 后续修改提交 , 就不用添加 - u
$ git push origin master
删除远程仓库
如果添加的时候地址写错了,或者就是想删除远程库,可以用 git remote rm <name> 命令。使用前,建议先用 git remote - v 查看远程库信息:
$ git remote -v
然后,根据名字删除,比如删除 origin :
$ git remote rm origin
此处的 “ 删除 ” 其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub ,在后台页面找到删除按钮再删除。
从远程仓库克隆
实际工作中很多时候是从远程仓库克隆
用命令 git clone 克隆一个本地库:
$ git clone 克隆地址