Git 简介
Git 是一个分布式版本控制工具,最初版本由Linux之父Linus在一周之内开发完成,目的是为了解决Linux内核维护工作的代码同步(不得不感叹李纳斯简直是神啊)
Git 与其他版本控制工具的差异
- 别的版本控制工具侧重文件内容的具体差异
- Git 关心文件数据的整体是否发生变化,把变化的文件作
快照
- Git 并不保存这些前后变化的差异数据,而是对数据得到进行sha-1摘要,并将此结果作为数据的唯一标识和索引,若文件没有变化,Git 不会再次保存
git 使用过程
创建文件夹
git init
由于刚刚初始化,此时显示On branch master,No commits yet,nothing to commit
创建文件并修改
将文件放入暂存区
提交到本地
文件的几种状态
修改(modified)
修改了某个文件,但还没有提交保存
暂存(staged)
把已修改的文件放在下次提交时要保存的清单中
提交(committed)
该文件已经被安全地保存在本地数据库中
基本的 Git 工作流程
- 在工作目录(working directory)中修改某些文件
- 对修改后的文件进行快照,然后保存到暂存区域(staging area)
- 提交更新(committed),将保存在暂存区域的文件快照永久转储到 Git 目录中
下面是工作目录,暂存区域,以及本地仓库三者之间的关系
git add
git add 命令,根据目标文件的状态不同,此命令的效果也不同
- 可以用它开始跟踪新文件
- 把已跟踪的文件放到暂存区
- 还能用于合并时把有冲突的文件标记为已解决状态
告诉 Git 开始对这些文件进行跟踪
tracked 、 untracked分别标识跟踪/不跟踪。对于每个文件,都只能处于这两种状态的其中一种
几个要注意的点:
- 已跟踪的文件是指被纳入版本控制管理的文件
- 未被跟踪的文件是指不被纳入版本控制管理的文件
- 要确定哪些文件当前处于什么状态,可以用 git status 命令,若是 nothing to commit (working directory clean),则标识你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过
git status
要确定哪些文件当前处于什么状态,可以用 git status 命令,若是 nothing to commit (working directory clean),则标识你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过
git diff
git status 的显示仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff 命令
- git diff:此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
- git diff --staged:已经暂存起来的文件和上次提交时的快照之间的差异
git ignore
写在git ignore中的文件无需纳入 Git 的管理,比如说,在目录下创建.gitignore文件,然后在文件中写入:
*.c 忽略所有的c结尾的文件
!wdnmd.c 文件wdnm.c不放入忽略沐浴露
/nmsl 只忽略项目根目录下的 nmsl文件,子目录下的nmsl文件不受影响
git clone
git clone命令可以复制一个现有仓库,且仓库中包含所有的历史版本
下面是几个常用的实际情景
通过HTTPS的方式
$ git clone https://github.com/richardchien/modern-cmake-by-example.git
通过ssh的方式
$ git clone git@github.com:richardchien/modern-cmake-by-example.git
通过ssh的方式,并且将本地的目录名命名为 wdnmd
$ git clone git@github.com:richardchien/modern-cmake-by-example.git wdnmd
通过ssh的方式,且要克隆的是某个服务器上的git目录仓库
$ git clone user@server:/path.git
git commit
- 直接输入git commit,这种方式会启动文本编辑器以便输入本次提交的说明,编辑器是Vim
- git commit -m “xxxx”,这种方式表示本次提交说明是引号中的xxx
- git commit -a -m ‘xxxx’ 这种方式跳过git add的过程直接将所有文件加入到暂存区然后提交
git log
该命令会打印出所有的提交历史,会按提交时间列出所有的更新,最近的更新排在最上面,每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明
$ git log -p -2
-p 选项展开显示每次提交的内容差异
-2 则仅显示最近的两次更新:
git push
git push 是用来将本地仓库中的数据推送到远程仓库
如果要把本地的 master 分支推送到 origin 服务器上,可以使用以下语句:
git push [remote-name] [branch-name]
git 分支
//TODO
思维导图
该图来自微信公众号:绯浅yousa
精选Git资料推荐
网页在线资料
书籍
- Github入门与实践
- Git团队协作
可视化的 Git 在线学习网站