缘起:由于要写博客,博客文章要添加,修改等,于是Git学习就必不可少。同时Git作为版本控制系统,在项目开发中特别有用,值得一学
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命令
$ git config --global user.name "你的名字"
$ git config --global user.email "你的Email"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建属于自己的Git仓库
你需要在某个你喜欢的地方创建一个目录,在此目录下运行Git命令
git init
这样你就已经初始化了一个新的Git仓库,初始化后,会在当前目录自动创建 .git 文件夹,该文件是Git中最重要的文件夹,Git相关文件以及版本都将保存在该文件夹中,如果你没有看到它,没有关系,因为它怕你不小心伤害它,开启了隐藏属性。
在仓库中放文件时,先看一下其工作流程
Git的工作流程一般是这样的
- 在工作目录中添加,修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git仓库
Git管理文件的三种状态
- 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。
这三棵树分别是:工作目录、暂存区和 Git 仓库

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

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