Github漫游手册

Github是一个面向开源及私有软件项目的托管平台,因为用户人群中多可是男女比例严重失调,在程序届被戏称全球最大同性交友网站。当年Linux系统横空出世,盛况空前,愈来愈多的程序猿加入到开发维护大军中,如此庞大的项目体量没有一个好的项目托管平台怎么行,因而Linux的创始人Linus大牛花了两周的时间本身用C语言编写了一个分布式版本控制系统,就是Git,而后Git就迅速成为最流行的分布式版本控制系统,在2008年,Github网站上线了,它为开源项目免费提供Git存储,就在去年以75亿美金的价格被微软爸爸收购了(来自贫穷的凝视)。git

如今VS Code中内置Git,配置一下文件路径和默认打开方式就能够直接在VS Code中进行Git操做,十分方便快捷。github

全球不少顶级的科技公司都将本身的项目贡献到Github上,同时咱们也能够在上面找到许多很是优秀的开源项目。感谢Github让咱们能够在一个开放畅通的互联网世界任意驰骋,如今Github已经成了产品开发过程当中的门面担当,不少企业在面试的时候都会要求应试者提供下Github帐户,一个出色的Github帐号确定会为你在求职中增色很多。面试

简单介绍了GitHub 的诞生和历史,接下来就为你们讲解一下,如何使用操做。windows


这里是Git的官方网站,涵盖了很是全面的Git文档:安全

git-scm.com/bash

市面上有不少Git教程,也有相关书籍,一般都是很厚一本,若是你是初学者,推荐廖雪峰老师的Git教程,基本功能都有涵盖,由浅入深,可让你快速上手使用。这篇文章就是基于他的教程,按照我本身的使用习惯,从一个新手角度再从新整理,认真学习后每一个人都会有不一样的收获,找到适合本身的就好。网络

一、安装GItssh

首先须要在本身的电脑上本地安装GIt,Mac系统自带Git,windows系统须要下载安装一下,过程很简单方便,这里就不赘述了,针对各个不一样系统的具体安装方法请参考廖雪峰老师的博客:分布式

www.liaoxuefeng.com/wiki/896043…学习

二、注册Github帐户

在Github网站填写用户名、邮箱、密码注册我的帐户。

注册成功以后你就会进入到Github主页,上方是导航栏,下方从左到右依次是:

**仓库:**你建立的全部仓库会在这里显示

**时间线:**你关注的人的一些活动,好比说他建立了新的仓库,或者star、fork了某些项目等等这些操做就会显示在这里,相似微博动态。

**发现新仓库:**这里会给推荐一些标星比较高的优秀项目,相似于热门微博。

简单介绍下头部导航栏的各个模块:

**LOGO:**点击进入Github首页

**搜索框:**搜索用户或者项目

**Pull requestes:**查看推送请求信息

**Issues:**查看问题推送信息

**Marketplace:**这里提供最新的软件,是代码软件集市

**Explore:**介绍Github上的热门软件

三、在本地配置Github帐户

安装Git完成以后,在命令行输入:

$ git config --global user.name "你的Github用户名"

$ git config --global user.email "你的Github注册邮箱"

来配置你本身的Github用户名和Email地址

四、建立SSH Key密钥

github须要经过ssh协议来确认内容是你推送的,否则任何人均可以往你的仓库中提交修改,就很危险了。使用多台电脑开发就要配置多个SSH Key,经过SSH key来确保你能把内容推送到你本人的仓库中。

首先在本地找到.ssh目录,mac用户使用快捷键:shift+command+G输入***~/.ssh***快速查找。查看目录下有没有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件,若是没有,能够在终端中运行***ssh-keygen -t rsa -C “你的github邮箱"***来生成ssh Key。

进入github网站在右上角点击我的头像,在下方找到Settings,在左侧第六个选项中找到SSH and GPG Keys,点击New SSH key,将你的id_rsa.pub里的内容粘贴到Key中,填上任意的Title,保存,此时你就能够在本地向远程github仓库推送内容。

五、将本地仓库Repository同步到远程

(1)初始化一个git仓库:git init

执行完这条命令后当前目录下会多一个.git目录,这个目录是git来跟踪管理版本库的,千万不要把它删除,看不到这个文件的修改一下本身的文件项,打开显示隐藏文件。

(2)把文件添加到仓库命令:

git add 文件名 将指定文件添加到暂存区,多个文件之间用空格隔开

git add /git add -A/git add --all 将工做区内容所有加入暂存区(包括新增、修改、删除文件操做)

***git add .***将当前目录下的全部内容所有加入暂存区(包括新增、修改文件操做)

执行完添加操做,没有任何显示就对了,在使用git的过程当中牢记:没有消息就是好消息,只有出错的时候它才会给你报错的提示信息。

这条命令能够反复屡次使用,将你须要添加的文件都提交到暂存区,而后执行一次git commit就能够将屡次提交到暂存区的文件一次性提交到当前分支。

(3)把文件提交到当前分支

git commit -m “提交说明”

git status 查看当前工做区的提交状态。所有提交后显示:

nothing to commit, working tree clean
复制代码

git diff 查看修改的内容。会比对暂存区和工做区的文件内容。

(4)推送到远程仓库

首先新建一个远程仓库,在Github主页右上角点击加号,选择第一个选项new repository,填写Repository name仓库名,Description描述,选择public属性,勾选Initial this repository with a README会自动生成一个MarkDown格式的README文档。这样咱们就在远程建立好了一个Git仓库。目前Github上建立公开仓库是免费的,全部人均可以看到仓库中的内容,若是想建立私人仓库是收费的,它鼓励你们开源。

建立好仓库以后他分三种状况给出不一样提示:

  • 在本地新建仓库,并推送内容到远程仓库

咱们只须要按照以下指令,依次执行:

echo "# Git-Test-Demo" >> README.md 新建一个README文件并写入内容

git init 生成.git版本库

***git add README.md***将当前工做区的文件提交到暂存区

***git commit -m "first commit”***将暂存区的内容提交到当前分支

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git 在本地关联远程库

这里你能够选择使用HTTPS链接或者SSH链接,使用HTTPS链接时每次推送都会要求有密码验证,相对来讲比较安全,缺点是速度慢。若是使用SSH链接,第一次使用Git的clone或者push命令链接GitHub时,会获得一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you want to continue connecting (yes/no)? 复制代码

输入yes便可

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
复制代码

这个警告只会出现一次,后面的操做就不会有任何警告了。

***git push -u origin master***将当前分支推送到origin主机的对应分支。

因为远程库是空的,咱们第一次推送master分支时,加上了-u参数,将本地的master分支推送到origin主机,同时指定origin为默认主机,在之后的推送或者拉取时就能够简化命令,不加任何参数直接使用***git push***来推送了。

  • 若是本地已有仓库,想的内容快速推送到当前仓库,只须要执行以下两条指令:

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git

git push -u origin master

  • 你也能够从其余版本控制系统如Subversion, Mercurial, or TFS project中导入仓库

因为我一开始新建仓库的时候勾选了自动生成README文档,而我本地的文件中又不存在这个文档,因此向远程仓库push的时候会报错,提示:

error: failed to push some refs to 'git@github.com:Hanxueqing/Maoyan-API.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
复制代码

缘由是本身当前版本低于远程仓库版本,能够在push以前先将远程仓库pull到本地,执行***git pull origin master***命令,再执行***git push -u origin master***命令推送到远程仓库。

或者新建立一个分支***git branch 分支名***,而后push到这个新分支上去***git push -u origin 分支名***。

这里我就直接使用了强制push的方法:git push -u origin master -f,可是它会覆盖远程的文件,通常不建议使用,尤为是多人开发的时候。

在本地执行完以上操做后就能够终端中出现提交成功的命令。

此时咱们在github帐户上进入以前建立的仓库会发现,全部工做区的文件已经在远程同步上传好了。

简单讲解一下仓库中各个模块的功能:

**Watch:**相似于关注,watch了某个项目以后,之后只要这个项目有任何更新,你都会收到通知提醒。

**Star:**相似于点赞,在Github上得到标星可比在社交网络中困难多了,通常能得到1000+star的项目就已经很是不错了。前一阵子在开发圈大火的996icu项目目前标星已经达到了245k。

**Fork:**将这个仓库的项目建立一个分支,添加到本身的仓库中,你就能够在原有仓库的基础上本身开发,等功能完善后再发起pull request请求与原仓库合并分支,将功能进行整合。


**Code:**显示该仓库的文件列表。

**Issues:**主要用于BUG报告、功能添加、方向性讨论等,相似于一个讨论区留言板功能,将BUG以Issues的形式进行管理,解决掉后能够手动关闭Issues。

**Pull request:**查看并管理别人发来的pull request请求。

**Projects:**这是一个很强大的项目管理模式,能够将你的issues更好地进行管理,有人利用Project+Issues在Github上编写技术博客。

感兴趣的能够关注下:

github.com/johnnian/Bl…

**Wiki:**Wiki 是一种比 HTML 语法更简单的页面描述功能。经常使用于记录开发者之间应该共享的信息或软件文档。

**Security:**安全警告

**Insights:**显示仓库的活动信息,检测开发进度

**Settings:**设置,在这里能够对当前仓库进行设置,例如仓库名更改,描述信息更改,以及删除当前仓库,不过这个操做比较危险,它会让你输入当前仓库名称进行二次确认,若是是仓库中有内容还会让你输入帐户和密码再次进行确认,安全等级很是高。


**commits:**提交日志

**branches:**分支管理

**releases:**发行版本管理

**contributors:**参与开发的人员


**Branch:master :**切换分支,显示不一样分支下的文件列表

**New pull request :**向原有仓库发起合并请求

**Create new file :**建立新文件

**Upload files :**上传文件

**Find files :**查找文件

**Clone or download :**提供克隆、下载的https协议或者SSH协议

接下来介绍一些Git的经常使用基本操做,方便后续使用。

撤销修改

这里咱们得先明确几个概念:工做区、暂存区、当前分支、远程仓库

**工做区:**咱们本身电脑里的文件目录

暂存区:.git目录中的stage文件,暂时存放咱们对于文件的修改,git add就是把文件添加到暂存区。

**当前分支:**git为咱们自动建立一个master主分支,git commit就是把文件修改提交到当前分支。

**远程仓库:**咱们一开始建立的Repository,git push就是把全部修改推送到远程仓库。


撤销工做区的修改(此时你只是修改了文件,可是尚未进行任何git操做):git checkout -- file

撤销暂存区的修改(此时你不只修改了文件,还git add将修改添加到了暂存区):git reset HEAD 再执行git checkout -- file

撤销提交到分支的修改(此时你不只修改了文件,还git add将修改添加到了暂存区,同时git commit提交到了当前分支):进行接下来要讲到的***版本回退***操做

版本切换

若是你向当前的仓库中屡次提交了修改文件,可使用***git log***查看完整的提交日志,commit后面的一大串数字就是版本号,git经过让内部HEAD指针指向特定版本号来实现版本的回退与前进。

image

若是你屡次提交,有一长串的提交日志,不想显示Author和Date,只须要第一行数据能够运行***git log --pretty=oneline***

若是你以为commitId太长,只想保留几位有效数字,能够运行***git log --oneline --graph***

回退命令:git reset --hard commit_id 能够回退到指定版本

git reset --hard HEAD^ HEAD指向的是当前版本,HEAD^就是上一个版本,上上个版本就是HEAD^^,若是回退到更早期的版本能够写成HEAD-数字(回退到以前的多少个版本)

前进命令:执行过版本回退命令后再执行git log会发现此版本以后更新的版本不见了,此时也不用惊慌,它并无被删除或者覆盖,git提供了一个命令:***git reflog***来记录你的每一次命令,只要找到你想恢复文件的commit id,再执行***git reset --hard commit_id***就能够来到指定版本了。

文件删除

(1)你在工做区删除了某一个文件,想同步修改到远程仓库。

***git status***查看当前状态,显示当前工做区中该文件已被删除,使用***git rm 文件名***命令将版本库中的该文件删除,而后***git commit***上传到当前分支。

(2)你在工做区误删除了某一个文件,想从远程仓库将该文件恢复回来。(前提是你在工做区删除的这个文件以前已经提交过版本库)

git checkout -- 文件名

Git checkout实际上是用版本库里的文件替换工做区的文件,不管工做区是修改仍是删除文件,均可以一键还原,可是你只能恢复文件到版本库中的最新版本,若是你在提交版本库后又作了一些修改可是没有及时提交,git不会自动帮你记录这些修改。

分支操做

首先咱们来理解一下分支的概念,以前已经提到过git会为咱们自动建立一个master主分支,可是在多人项目开发的时候,咱们不能全部人都往主分支上提交修改,那样存在很大的安全隐患,这时候git鼓励咱们使用分支完成任务,HEAD指针指向当前分支,每一个人往本身的分支上提交文件,互不干扰,平时本身开发项目时也可使用分支来管理不一样功能模块,最后使用合并分支命令,将文件整合到一块儿,这和直接在master分支上工做效果是同样的,但过程更安全。

也就是说,在实际开发中,master分支应该是很是稳定的,仅用来发布新版本,平时不能在上面操做,具体的操做咱们能够在dev上进行,把每一个人的分支合并到dev分支上,在版本发布的时候再把dev的分支合并到master上。

建立分支

git checkout -b 分支名

git checkout命令加上-b参数表示建立并切换,至关于如下两条命令:

***$ git branch 分支名***建立分支

***$ git checkout 分支名***切换分支

将本地建立的分支推送到远程

git push origin 分支名

查看分支

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

***git branch -r***查看远程分支

***git branch -a***查看全部分支

合并分支

git merge 分支名 (注:合并前要切回要并入的分支,不能在当前分支下进行合并)

删除分支

git branch -d 分支名

***git branch -D 分支名***强行删除一个没有被合并过的分支,默认状况下是不容许删除没有被合并过的分支的。

克隆远程仓库

***git clone 仓库地址***仓库首页能够找到仓库地址,经过clone命令克隆到本地。

关于Github的使用就简单介绍到这里,可是它的功能远不止于此,知乎上有个回答,如何有效的使用Github,有人用它放简历、写博客、写书、看资讯,有人把它当朋友圈、微博,跟技术大牛互动,把连接贴上来,有兴趣的能够关注看看:

www.zhihu.com/question/21…

总之,它就像一个宝藏,永远有闪光点和值得学习的地方有待于咱们去发掘。

相关文章
相关标签/搜索