
Git是什么
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/
GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。
Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:
无GitHub:在本地 .git 文件夹内维护历时文件 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
安装好Git的第一件事
初次使用Git前,在命令行输入第一条Git命令
1 | $ git config --global user.name "你的名字" |
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建属于自己的Git仓库
你需要在某个你喜欢的地方创建一个目录,在此目录下运行Git命令
1 | git init |
这样你就已经初始化了一个新的Git仓库,初始化后,会在当前目录自动创建 .git 文件夹,该文件是Git中最重要的文件夹,Git相关文件以及版本都将保存在该文件夹中,如果你没有看到它,没有关系,因为它怕你不小心伤害它,开启了隐藏属性。
在仓库中放文件时,先看一下其工作流程
Git的工作流程一般是这样的
- 在工作目录中添加,修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git仓库
Git管理文件的三种状态
- 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。
这三棵树分别是:工作目录、暂存区和 Git 仓库

工作目录(Working Directory)即存放项目代码的地方。
暂存区(Stage)用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。
Git 仓库(Repository)就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最近一次放入仓库的版本
基本操作
项目添加到暂存区域
1 | git add 文件名 |
项目提交到本地Git仓库
1 | git commit -m '本次提交描述信息' |
查看Git当前状态,如:哪些文件被修改过、那些文件还未提交到版本库等
1 | git status |
查看提交记录,即:历史版本记录
1 | git log |
Git版本回滚(Git的后悔药)
git reset 命令就是你的后悔药。它可以将当前的工作分支的HEAD定位到以前提交的任何版本中
git rest –mixed [commit]
1 | 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变(保留差异) |
git rest –soft [commit]
1 | 保留回退差异到暂存区(工作区不变) |
git rest –hard [commit]
1 | 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致(不保留差异) |
reset命令回滚快照三部曲
1 | - 回退的差异保留在暂存区,工作区不变(--soft) |
修改最后一次提交
1 | 在实际开发中,你可能会遇到以下两种情景 |
Git分支管理
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

常规操作
1 |
|
Git 标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
创建标签
1 | git tag 标签名如(1.0.0) 1b2d3c42ff |
指定标签信息
1 | git tag -a 标签名 -m "第一个版本" |
常规操作
1 | # 列出所有tag |
Git服务器搭建
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。 搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的用户账号
第一步,安装git
1 | $ sudo apt-get install git |
第二步,创建一个git用户,用来运行git服务
1 | $ sudo adduser git |
第三步,创建证书登录
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
1 | $ sudo git init --bare sample.git |
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
1 | $ sudo chown -R git:git sample.git |
第五步,禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
1 | git:x:1001:1001:,,,:/home/git:/bin/bash |
改为:
1 | git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell |
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
1 | $ git clone git@server:/srv/sample.git |