原文出处:架构之美
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