原文出处:架构之美


Git的前世今生

学过计算机的都应该知道,Linus在1991年创建了Linux操作系统,并从那时起开始不断壮大,逐渐成为全世界最大的服务器操作系统。那么,如此庞大的系统应该如何管理其代码呢?
2002年之前,大神Linus本人以手工方式合并代码。再之后BitMover公司出于人道主义精神,授权Linux社区免费使用BitKeeper这个商业性的版本控制系统。再之后,由于Linux社区有人尝试试图破解BitKeeper的协议,导致BitMover与Linux社区分道扬镳!
结果是怎样呢?Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!从这里开始,Git迅速成为最流行的分布式版本控制系统。2008年GitHub网站的上线更是让Git火得一塌糊涂!
接下来我们就来看看如何使用Git,当然了,前提是你愿意花10分的时间来了解。

安装Git

Debian系使用apt-get方式安装,Red Hat系使用yum方式安装。

sudo apt-get install git
yum install git

设置用户名和邮箱

Git是分布式版本控制系统,安装完还不能直接使用,需要设置用户名和邮箱。

git config --global user.name "Your Name"git config --global user.email "email@example.com"

创建新的版本库

创建目录并在目录中初始化版本库。

mkdir git && cd git
git init

提交文件

新建一个readme.txt文件并提交到版本库。

echo "Git is a version control system.">>readme.txt
git add readme.txt
git commit -m "add readme"

查看状态

git status

查看修改内容

比较工作区与暂存区的文件区别。
git diff readme.txt
比较暂存区跟版本库的文件区别。
git diff --cached readme.txt
比较工作区跟暂存区的区别。
git diff
比较工作区与版本库的区别。
git diff HEAD
比较最近两个版本的区别。
git diff HEAD^ HEAD

查看日志

如果记录太多,可添加--pretty=oneline只显示一行。
git log --pretty=oneline
查看操作日志
git reflog

版本库回退

git reset --hard HEAD^

撤销修改

撤销工作区修改
git checkout -- readme.txt
撤销暂存区修改
git reset HEAD readme.txt

删除文件

git rm readme.txt

创建SSH Key

首先,在用户主目录里查看是否存在.ssh目录,里面是否有id_rsa和id_rsa.pub两个文件,如果存在,则跳过这一步。

ssh-keygen -t rsa -C "youremail@example.com"

登陆GitHub,打开“Account settings”,进入“SSH and GPG keys”页面,点“New SSH key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

添加远程仓库

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的空仓库。

git remote add origin git@github.com:mayer2014/notes.git
git push -u origin master

推送更新到Github

git push origin master

从Github克隆

git clone git@github.com:mayer2014/notes.git "可重命名目录名"

创建分支

git checkout -b dev
或者
git branch dev
git checkout dev

查看分支

git branch

切换分支

git checkout master

合并分支

合并到当前分支,可以使用--no-ff方式普通合并,强制禁用Fast forward模式,Git就会在merge时生成一个新的commit。

git merge dev
或者
git merge --no-ff -m "merge with no-ff" dev

删除本地分支

删除已合并的分支。
git branch -d dev
删除未合并的分支。
git branch -D dev
删除远程分支
git push origin :dev
或
git push origin --delete dev

保存工作区

原理:保存工作目录的中间状态——修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中。

保存工作区
git stash
保存工作区时忽略已暂存的文件。
git stash --keep-index
保存工作区时包含新创建的文件。
git stash -u
查看保存的工作区
git stash list

恢复工作区

恢复最近一次保存的工作区。
git stash pop
恢复指定的工作区。
git stash pop stash@{id}
或
git stash apply stash@{id}
git stash drop stash@{id}

查看远程库

git remote -v

推送本地分支

git push origin dev

拉取远程分支到本地

git clone 只能拉取到主分支。

git checkout -b dev origin/dev

关联远程分支

如果第一次推送分支时没有使用git push -u origin dev推送,则使用git pull需要先关联本地分支与远程分支。

git branch --set-upstream dev origin/dev

标签管理

当前版本打标签。
git tag v0.1
为某一版本打标签并带上说明,-a指定标签名,-m指定说明文字。
git tag -a v0.1 -m "版本v0.1" commit_id
查看标签列表。
git tag
查看标签信息。
git show v0.1
删除标签。
git tag -d v0.1

推送某个标签。

git push origin v1.0

推送全部本地标签。

git push origin --tags

删除远程库标签。

git push origin :refs/tags/v0.1