git-分布式版本控制器
分布式和集中式的区别:
集中式版本控制:版本库集中在一台服务器上,每次开发都需要先从服务器上获取最新版本,开发完成需要提交再把新的版本发回服务器。例如SVN。
分布式版本控制:本地电脑中有一份完整的版本库,需要多人合作时只需把自己修改的推送到服务器上,对方拉取就好。
有不知道的命令可以查阅手册:Git命令的使用手册(verb为需要查找的命令)
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
Git仓库生成
每次的修改都是版本的更新,所以我们需要一个版本库来记录这些信息。
$ git init
# Git初始化的命令,用于新建版本库
执行初始化命令后,目录中会产生新的目录
.git/
这个版本库会默认记录当前目录中任何文件的改动。如果删除这个版本库,之前记录的信息都会缺失。
上文已经提到如何在现有目录初始化仓库。如果想要获得一份已经存在了的Git仓库拷贝,就要用git clone命令,克隆的是该Git仓库服务器上的几乎所有数据。执行时,默认配置下远程Git仓库中的每一个文件的每个版本都会被拉取下来。
$ git clone [url]
如果想在克隆远程仓库时自定义本地仓库文件,则使用命令
$ git clone [url] [自定义名字]
本地Git仓库操作
基本本地Git仓库概念了解
工作目录下的文件只有两个状态:已跟踪和未跟踪。(是否add)
检查当前文件状态
$ git status
$ git status -s || git status --short //更为紧凑的提示
显示情况:
工作目录很干净,在上次提交代码后没更新过
On branch [分支名] nothing to commit,working directory clean
有未跟踪的文件(新建了文件)
On branch [分支名] Untracked files:(......)
有文件处于暂存状态
On branch [分支名] Changes to be committed:(处于暂存状态的文件...)
Git本地仓库有三种状态
- 已提交(committed)– 数据已经安全的保存在本地数据库中
- 已修改(modified)– 修改了文件但还没保存在数据库中
- 已暂存(staged) – 对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
Git三个本地工作区域
- Git仓库 - Git 用来保存项目的元数据和对象数据库的地方
- 工作目录 - 对项目的某个版本独立提取出来的内容
- 暂存区域 - 是一个文件,保存了下次将提交的文件列表信息
基本Git工作流程:
- 在工作目录中修改文件。(编写代码)
- 暂存文件,将文件的快照放入暂存区域。(暂存代码)
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。(提交更新代码)
(本地磁盘–>暂存区域–>本地Git仓库)
跟踪新文件或者把已跟踪的文件放到暂存区(添加内容到下一次提交中)
$ git add 文件名
提交更新(放在暂存区域的快照)
$ git commit //启动编辑器输入提交说明
$ git commit -m '注释'
$ git commit -a -m '注释' //调过使用暂存区域,把所有已跟踪的文件的更新直接提交到本地仓库
额外一些附属操作
移除文件
git rm 文件名 //连带从工作目录中删除
git rm --cached 文件名 //删除Git仓库中(包括暂存区域)的文件,但是不删除工作目录里的文件
查看提交历史
$ git log //按提交时间列出所有的更新,最近的更新排在最上面
$ git log -p //显示每次提交的内容差异
$ git log -2 //最近两次的提交
$ git log --stat //简略的统计信息
比较工作目录中 当前文件(还未在暂存区域的) 和 暂存区域 快照(已经add的,并非上次提交的)之间的差异
$ git diff
查看已暂存的将要添加到下次提交里的内容
$ git diff --cached
忽略无需加入Git管理的文件
创建 .gitignore的文件,列出要忽略的文件模式
撤销操作
有时提交完了才发现有几个文件没加,或者注释写错了(像我经常觉得自己注释写的不好。。),可以尝试重新提交。
$ git commit --amend
来个例子
$ git commit -m '第一次提交信息xxxxx' //先提交了
$ git add aaa.js //发现有个文件没提交,加进去
$ git commit --amend //重新提交,覆盖上一次的提交
不过讲道理我是不建议取消的。宁愿重新commit。特别害怕数据丢失。