美文网首页
2018-03-12

2018-03-12

作者: 小明阿李 | 来源:发表于2018-03-13 12:55 被阅读0次

    Git使用教程

    Git是什么?Linus为了管理Linux系统代码而开发的一个版本控制系统。

    版本控制(Revision control)是一种软体工程技巧,以利于在开发过程中,确保不同人所编辑的同一档案都得到更新。

    集中式和分布式版本控制系统有什么区别?
    集中式版本控制系统,版本库是集中存放在中央服务器上的。
    分布式版本控制系统,没有“中央服务器”,每个人的电脑上都是一个完整 的版本库。


    Git安装

    Git可以在Linux、Unix、Mac和Windows几大平台上正常运行。

    在Windows上使用Git,可以从Git官网直接下载安装程序。安装完成后,在开始菜单里找到“Git”->“Git Bash”,跳出一个类似命令行窗口的东西,就说明Git安装成功!

    但是,别急!还需要最后一步设置,在“Git Bash”命令行输入:

    git config --global user.name "Your name"
    git config --global user.email "email"

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
    因为Git是一个分布式版本控制系统,所以,每个机器都必须有ID--你的名字和Email地址。

    小结:
    Git安装完成后,要进行配置:

    git config --global user.name "Your name"
    git config --global user.email "email"


    创建版本库

    什么是版本库?版本库又名仓库,英方名repository,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理。每个方件的创建、修改、删除,Git都能跟踪。

    那怎样创建一个版本库呢?

    首先,选择一个合适的地方,创建一个目录:

    mkdir gittest

    第二步,切换到gittest,运行git init命令把这个目录变成可管理的仓库:

    初始化后,在 gittest 目录下出现一个名为 .git 的目录,也就是仓库,所有 Git 需要的数据和资源都存放在这个目录中。

    小结
    创建本地版本库,需要两步:

    1. 创建目录

    mkdir

    1. 初始化版本库

    git init


    基本操作

    仓库创建成功后,我们就可以把项目放到里面进行管理。首先,切换到gittest目录(仓库)下,创建文件readme.txt,接下来将文件提交到仓库:

    第一步,运行git add,把文件添加到仓库:

    git add readme.txt

    第二步,运行git commit,把文件提交到仓库:

    git commit -m "create readme.txt"

    我们使用 -m 选项以在命令行中提供提交注释。如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。

    接下来,往readme.txt中加入内容并提交:

    运行git status命令可以查看仓库当前的修改状态。

    当我们对文件进行修改并提交到版本库,Git会对每一次提交保存一个节点,当我们误删文件之后可以从最近一个节点恢复文件。
    但是,当我们对一个方件进行了成百上千次的编辑、修改之后,我们肯定已经不记得每一次都改了什么。不用担心,Git有办法-运行如下命令可以查看历史记录:

    git log

    可以看到,我们对文件进行过三次修改。
    恩,看上去是不是有点乱?没关系,运行如下命令:

    git log --pretty=oneline

    是不是感觉全世界都清静了。
    需要注意,我们所看到的类似ca43c95...的字符是commit id,那这有什么用呢?接着往下看。

    下面,来点有趣的--版本穿越:

    首先,Git必须知道当前是哪个版本。在Git中,用HEAD表示当前版本,下就是最后提交的版本。上一个版本是 HEAD^,上上个版本是 HEAD^^,以此类推。如版本太多?比如100可表示成 HEAD~100

    在Git中,运行git reset命令回退版本。下面,我们把文件回退到上一个版本:

    git reset --hard HEAD^

    现在,我们运行git log现在版本库的状态:

    恩,我们可以看到add again那个版本已经不见了。当然,你还可以继续往前回退。但是,我突然发现我弄错了,想回到add again版本,肿么办?

    现在,commit id派上用场了,我们只要往前找到对应版本的commit id就可以有后悔药可吃,运行命令:

    git reset --hard catec95

    下面是见证奇迹的时刻:

    怎么样,又回来了!

    这是为什么呢?Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git把HEAD指向了你要回退的版本。

    现在,问题来了!如果我回退到上一个版本后,过了一天后悔了我去哪里找commit id呢?
    Git提供了一个命令git reflog用来记录你的每一次操作:

    这样是不是就找到commit id了。

    小结

    1. 文件修改后,运行git add添加到仓库;
    2. 接着,运行git commit提交到版本库,命令可使用参数"-am";
    3. 运行git status可查看版本库当前状态,参数"-s"供简洁输出;git diff可查看版本库修改内容的详细信息。
    4. git log可查看修改记录,git log --pretty=online提供简洁输出;
    5. 运行git reset --hard HEAD^将版本库回退到上一版本状态。git reset --hard commit id可回退到对应的版本;
    6. git reflog用来查看你的每一次操作。

    工作区与暂存区

    工作区(Working Directory),就是你在电脑里能看到的目录,比如我的gittest文件夹就是一个工作区

    暂存区,英文叫stage(index)。一般存放在“.git目录”(也就是版本库)下的index文件。

    我们已经知道,把文件添加到版本库里,有两个步骤:

    1. 运行git add,实际就是把修改文件添加到暂存区;
    2. 运行git commit,就是把暂存区的内容提交到当前分支。

    撤销修改

    • 丢掉工作区的修改:

    git checkout -- file

    该命令可以把我在里添加的内容撤销掉。这里有两种情况:
    一种是修改后没有添加到暂存区,撤销修改就回到和版本库一模一样的关态;
    另一种是添加到暂存区后,又作了修改。撤销后加到添加到暂存区时的状态。

    • 如果你修改后已经提交到了暂存区,则需要两步:
    1. 运行git reset HEAD file把暂存区的文件退回到工作区;
    2. 运行git checkout -- file撤销修改

    小结

    1. 运行git checkout -- file撤销工作区的修改;
    2. git reset HEAD file把暂存区文件退到工作区。

    删除文件

    如果我们把readme.txt从工作区中删除,那工作区与版本库就不一致。运行git status查看:

    现在,有两种选择:

    • 如果确实想删除该文件,那么运行git rm将版本库中的文件删除,并git commit。
    • 如果是误删除,运行git checkout -- readme.txt将文件从版本库中恢复到工作区。

    小结
    运行git rm可删除版本库的文件。


    远程仓库

    在这,我们需要应用到GitHub网站。这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

    首先,应注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
    第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

    ssh-keygen -t rsa -C "email"

    你需要把邮件地址换成你自己的邮件地址,一直回车,使用默认值即可。

    创建成功后,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    第2步:登陆GitHub,打开“Settings”,“SSH and GPG Keys”页面:
    然后,点“New SSH Key” :

    填上Title(可不填),在Key文本框里粘贴id_rsa.pub文件的内容点击"Add SSH Key":

    添加远程仓库

    首先,登陆GitHub,在右侧找到New repository点击。

    进入后,在Repository name 填入仓库名,其它默认,点击Create repository .

    现在,在GitHub上的这个gittest仓库还是空的,可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

    我们根据GitHub的提示,把一个已有的本地仓库与之关联。在本地gittest仓库下运行

    git remote add origin git@github.com:renfuli/gittest.git

    注意把后面换成自己的地址。添加后,远程库的名字就是origin.

    下一步,把本地库的所有内容推送到远程库上:

    git push -u origin master

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    推送成功后,刷新GitHub页面,看到远程库的内容已经和本地一模一样:

    小结

    1. 运行git remote add origin xx,将一个本地仓库与远程仓库关联;
    2. 运行git push orign maste把本地仓库推送到远程。

    从远程克隆仓库

    首先,登陆GitHub,创建一个新的仓库gitstudy

    勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

    下一步是用命令git clone克隆一个本地库:

    Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。


    分支

    首先,我们创建dev分支,然后切换到dev分支:

    git checkout -b dev

    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    git branch dev
    git checkout dev

    然后,运行:

    git branch

    git branch命令会列出所有分支,当前分支前面会标一个*号。

    我们在dev分支下创建index.html,然后提交:

    现在,切回master分支,发现并没有index.html。因为那个提交是在dev分支上。

    现在,我们把dev分支的工作成果合并到master分支上:

    git merge命令用于合并指定分支到当前分支。合并后,可以看到index.html

    最后,删除dev分支:

    git branch -d dev

    小结

    1. 创建分支,运行git branch dev;
    2. 切换分支,运行git checkout dev;运行git checkout -b dev是创建并切换;
    3. 运行git branch查看所有分支,标记*号的为当前分支;
    4. 命令git merge dev将指定分支合并到当前分支;
    5. 命令git branch -d xx用于删除分支。

    本文根据自己的学习笔记整理。由于水平有限,还存在诸多不足,欢迎各位批评指正。谢谢!在学习期间,得到了饥人谷老师的指导,非常感谢!


    参考
    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
    http://www.runoob.com/git/git-tutorial.html

    相关文章

      网友评论

          本文标题:2018-03-12

          本文链接:https://www.haomeiwen.com/subject/gliofftx.html