zoukankan      html  css  js  c++  java
  • GitHub使用总结

        Git是一个免费的、分布式的版本控制工具,最初应用在Linux上的,现在Windows下也可以使用而且Windows下有图形用户界面(GitHub for Windows)操作更简单更容易上手;GitHub是一个基于Git的项目托管平台,它提供了Web界面,你可以在上面创建资源仓库来存放你的项目。

    Git与SVN的区别

        Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

        SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

    理解相关概念

    1、工作区(Working tree)

        实际项目所在的目录,每当你在代码中进行了修改,working tree的状态就改变了。

    2、版本库(Repository)

        工作区有一个隐藏目录.git,这个不属于工作区,是版本库。其中版本库里面存了很多东西,其中最重要的就是Stage(暂存区,也叫缓冲区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD(指向最近一次提交后的版本)。

    3、暂存区(Stage)

        Git需要将代码的变化显示与下一次提交进行关联。举个例子,如果你修改了一个文件,然后想将这些修改进行提交,必须将这个文件提交到暂存区,通过git add file命令。这样暂存区可以保存所有变化的快照。 

    常用操作

    1、创建版本库

        第一步,选择合适的位置,创建一个空目录,mkdir命令用于创建目录,pwd命令用于显示当前命令;

        第二步,通过git init命令把这个目录变成Git可以管理的仓库。

    QQ20160216170601_thumb84

    2、文件添加至版本库

        第一步,在工作目录中新建文件,例如(test.cpp),使用命令git add test.cpp添加到暂存区;

        第二步,使用命令git commit -am告诉Git,把文件提交到仓库,此外,可以使用命令git status查看未被添加到暂存区或者未被提交的文件。

    360165307137883130_thumb2

    3、修改文件

        第一步,修改文件中(test.cpp)中的内容,例如加入一行代码,继续使用命令git status查看下结果,结果显示test.cpp已被修改,但是未提交的修改;

        第二步,接下来,想看看test.cpp文件到底修改了什么内容,可以使用git diff test.cpp查看具体的修改内容。

    360166305078095127_thumb6

    4、撤销修改

        第一种情况,当你修改了工作区的某个文件,但未添加到暂存区时,可以使用git checkout -- file 命令,来实现丢弃工作区的修改;

        第二种情况,当你修改了工作区的某个文件,并添加进暂存区时,想丢弃修改,分两步,第一步使用命令git reset HEAD file使修改回到工作区,第二步使用命令git checkout -- file命令彻底丢弃修改。

    36016341028447152_thumb2

    36016430922607473_thumb2

    5、撤销某次操作(提交)

        撤销某次操作,可以使用git revert HEAD 或 SHA(版本号),撤销前版本或者某个版本的修改,此次操作之前的commit都会被保留;

        撤销某次提交,可以使用git reset HEAD ~1或 SHA(版本号),撤销前版本或者某个版本的提交,此次操作之后的所有修改都会被退回到暂存区;

    360164912249611798_thumb3

    36016200713857388_thumb2

    6、版本回退

        第一步,使用git reset --hard HEAD~1 或者 SHA(版本号)命令,使当前版本回退到上一版本或者指定版本;

        第二步,现在你回退到了某个版本,后悔了,想恢复到新版本,使用git reflog获取新版本的commit id,再使用git reset --hard commit id回退到新版本。

    360164101237711192_thumb2

     7、删除文件

        第一种情况,使用git rm file删除文件,并使用git commit进行提交;

        第二种情况,删除文件后,发现删错了(此时未提交),想要取消删除,第一步使用命令git reset HEAD file使删除的文件回到工作区,第二部使用命令git checkout -- file命令彻底删除操作。

    36016501115323830_thumb1

    36016511008296270_thumb1

    8、远程仓库

        在了解之前,先注册github账号,由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一点设置:

        第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:ssh-keygen  -t rsa –C HarderQian@163.com”,运行完此命令后,本地.ssh目录中会新增id_rsa和id_rsa.pub这两个文件,其中id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心大胆地告诉任何人。

        第二步:登陆GitHub网站,打开“Setting”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。

    360166206158610277_thumb4

        点击 Add SHH Key,你就应该可以看到已经添加的key。

    36016460530586377_thumb3

    8.1 添加远程仓库

        现在的情景是:我们已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且希望这两个仓库进行远程同步,这样GitHub的仓库可以作为备份,又可以其他人通过该仓库来协作。

        第一步,登录GitHub上,然后在右上角找到“create new reporsity”创建一个新的仓库。如下:

    360164507069978127_thumb2

        在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

    11_thumb2

        第二步,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。下面,我们根据GitHub的提示,在本地的learngit仓库下运行命令:git remote add origin https://github.com/HarderQian/learngit.git, 把本地仓库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

    33_thumb1

        由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

    22_thumb2

    从现在起,只要本地作了提交,就可以通过如下命令:

    git push origin master

    把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。

    8.2 从远程库克隆

        上面我们了解了先有本地库,后有远程库时候,如何关联远程库。现在我们想,假如远程库有新的内容了,我想克隆到本地来,如何克隆呢?

        第一步,登录GitHub,创建一个新的仓库,名字叫learngit2.如下:

    33_thumb4

        第二步,使用命令git clone克隆一个本地库了。如下所示:

    44_thumb1

        接着在我本地目录下生成learngit2目录了,如下所示:

    55_thumb2

     9、创建与合并分支

        每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

        第一步,创建dev分支,然后切换到dev分支上,其中git checkout命令加上-b参数表示创建并切换,相当于如下两条命令:

    git branch dev

    git checkout dev

    66_thumb1

        第二步,在dev分支中,修改test.cpp,在末尾加一行777777,切换到master分支,修改test.cpp,在末尾加一行666666。

    88_thumb3

        第三步,切换到master分支,使用git merge dev命令,将dev分支合并到master上。

    99_thumb1

        第四步,会发现,合并之后,产生了冲突,使用git status命令查看冲突文件,其中,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>dev 是指dev上修改的内容,最后,修改冲突代码段之后,进行保存。

    333_thumb2

    444_thumb1

        第五步,合并完成后,我们可以接着删除dev分支了,操作如下:

    555_thumb3

    Git常用命令

    命令功能说明
    mkdir 创建一个空目录
    pwd 显示当前目录路径
    cat XX 查看XX文件的内容
    git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件
    git log 显示各版本信息,其中,page up and down键可以翻页,q键退出版本信息列表
    git status 查看仓库状态
    git add XX      把xx文件添加到暂存区去,git add .是把所有修改的文件添加到暂存区
    git commit –m “XX” 提交文件,"XX”是注释
    git diff  XX 查看XX文件修改了哪些内容
    git reset  --hard HEAD~n 回退到上面第n个版本
    git checkout -- XX 把XX文件在工作区的修改全部撤销
    git rm XX 删除XX文件
    git remote add origin XX 关联远程仓库XX
    git push –u origin master (第一次要用-u 以后不需要)   把当前master分支推送到远程库
    git clone XX 从远程仓库XX克隆
    git checkout –b XX 创建XX分支 并切换到XX分支上
    git branch 查看当前所有的分支
    git checkout XX 切换到XX分支
    git merge XX 在当前的分支上合并XX分支
    git branch –d XX 删除XX分支
    git branch XX  创建分支XX
    git push origin master 把master分支推送到远程库对应的远程分支上

    作者:HarderQian

    出处:http://www.cnblogs.com/harderqian

    说明:文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    一件重要的事想要告诉大家 AlexCool
    经典永不过时!重温设计模式 AlexCool
    腾讯云网络核心技术演进实践|好文推荐 AlexCool
    经典永驻,重温设计模式 |硬核! AlexCool
    linux网络全景指南 AlexCool
    Linux调度系统全景指南(终结篇) AlexCool
    大厂的面试官是如何挑人的? AlexCool
    中国大学MOOC数据结构基础习题集、023、求前缀表达式的值
    中国大学MOOC数据结构基础习题集、041、Root of AVL Tree
    中国大学MOOC数据结构基础习题集、052、Saving James Bond Easy Version
  • 原文地址:https://www.cnblogs.com/harderqian/p/5202203.html
Copyright © 2011-2022 走看看