一、什么是Git
GIt是分布式版本控制系统。
那什么是版本控制系呢?我们都有过这样的体验,就是同一个文档保存成这样:
xxxxx.doc
xxxxx(1).doc
xxxxx(2).doc
xxxxx(最终版).doc
为什么会出现这样的情况?原因很简单,我们不敢把先前的文档删了,害怕改过以后的文档还不如先前的文档,删了以后就找不回来了,这个时候就是我们手动管理版本。Git的出现结束了手动管理版本的时代,并提供了比手动管理更强大的功能。
那Git是怎么管理不同版本的呢?
二、Git管理版本的原理
在使用Git进行版本管理时,首先要先创建一个仓库(Repository),其实就是一个内含Git管理文件的文件夹。仓库包含两大部分,如下:
工作区就是我们的文件夹,我们添加、修改和删除文件夹下的内容,不会影响版本库中的内容(其实版本库也在文件夹下,只不过是一种隐藏文件而已)。
三、Git的使用(Ubuntu 系统下)
1、安装Git
sudo apt-get install git
安装后告诉Git系统你的姓名和邮件地址
git config --global user.name "your name" git config --global user.email "your email"
--global参数表示为该机器中的所有仓库都配备统一的用户名和邮件地址。
2、创建仓库
mkdir myrepo cd myrepo git init
3、将修改提交至版本库
假设现在在repo文件下新建了一个readme文件,对改文件进行提交
git add readme git commit -m "First Commit"
必须先add再commit,commit是从stage(缓冲区)提交至HEAD所指向的分支,初始只有maste分支,master本身实际也是一个指针,指向主分支的最新版本,HEAD又指向master。
其中-m参数用来给出提交信息,写在双引号中。
4、查看工作区状态
当我们想知道那些内容修改了还没有add或是add后还没有commit,就可以查看工作区状态:
git status
5、查看工作区和缓存区中某个文件的差异
git diff readme
6、查看提交记录
git log
7、回退到某个版本
回退到上一个版本,
方法一:
git reset [--hard] HEAD^
方法二:
git reset [--hard] 45d3
45d3是每次提交产生的hash值得前四位,最好能唯一标定某个版本就好。
8、回退某个版本后再回到最新的版本
第一步:先找到版本号
git reflog
该命令会列出你的历史操作记录,记录对某个版本进行了什么操作,且给出了版本号。
第二步:
git reset [--hard] 4ddd
9、chechout
第一种用法:用版本库中的版本(缓冲区和分支中)替换工作区中文件。
git checkout -- filename
用缓存区中的指定文件替换工作区中同名文件。
git checkout HEAD filename
用版本库中的HEAD指向的版本中的指定文件替换工作区中同名文件。
第二种用法:切换分支
10、分支操作
git branch #查看分支状态 git branch BranchName #创建分支 git checkout BranchName #切换分支 git chechout -b BranchName #创建并切换分支 git merge BranchName #将指定分支合并到当前分支 git branch -d BranchName #删除分支
git log --graph #显示分支合并图
若在合并分支的时候出现冲突,即两个分支都进行改动了,则需要先处理冲突再合并。
分支的作用非常大,一个仓库通常一个master分支,专门用来发布软件的,一般不改动,还有一个dev分支,专门用于开发,每个程序员还有个分支,并定期的合并到dev分支中,并在开发完成后从dev分支合并到maste分支用于发布软件。
11、标签管理
git tag TagName #在HEAD指向的版本处打一个标签
git tag TagName CommitId #在指定版本号处打标签
git show TagName #显示指定标签版本的信息
git tag #查看所有标签
git tag -d TagName #删除标签
四、GitHub
前面说Git是一个分布式的版本控制系统,不同于集中式的版本控制系统(SVN、CVS),分布式中每台都是独立的,没有服务器的概念。但为了方便协作开发,通常会认为的选定一台机器作为中转机器24小时开机,在该机器上进行协作开发,GitHub就是这么一个东西。如何用Git进行远程操作也就变成了如何使用GitHub的问题。
1、由于Git采用SSH传输,先在本地生成SSH秘钥
ssh-keygen -t rsa -C "youremail@example.com"
然后直接回车,最终会在你的home目录下生成.ssh文件夹,里面有两个文件id_rsa和id_rsa.pub,把id_rsa.pub中的秘钥复制到GItHub中就好。
2、将GitHub上的库与本地关联
git remote add origin git@server-name:path/repo-name.git
注意:先要在本地建立一个和GitHub上名字一样的文件夹。
3、将GitHub上的库克隆到本地上
git clone git@github.com:server-name/project-name.git
4、将本地库推送到GitHub上
git push [-u] origin master
第一次用加上参数-u,意思表示将master分支推送到origin(代表远程仓库)。
五、使用GitHub参与开源项目
1、找到一个开源项目Fork到自己的账号上来
2、在自己的电脑将该项目cloneg下来,注意:直接在别人账号下clone是没有权限的。
3、在本地主机修个bug或是添加功能,然后推送的GitHub上
4、如果你感觉你的写的还可以,你在GitHub上点击pull request,最后你的代码到底能不能被用上,还得看这个开源项目的官方会不会接受。
本文参考GitHub教程